位置:首頁(yè) > 軟件操作教程 > 編程開(kāi)發(fā) > C# > 問(wèn)題詳情

C# ?.運(yùn)算符

提問(wèn)人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-08

    這個(gè)操作符通常稱(chēng)為Elvis運(yùn)算符或空條件運(yùn)算符,有助于避免繁雜的空值檢査造成的代碼歧義。例如,如果想得到給定客戶的訂單數(shù),就需要在設(shè)置計(jì)數(shù)值之前檢查空值:

int count =0;

if (customer.orders ! = null)

{

  count = customer.orders.Count();

}

如果只編寫(xiě)了這段代碼,但客戶沒(méi)有訂單(即為null),就會(huì)拋出System.ArgumenlNullException:

    int count = customer.orders.Count();

使用?.運(yùn)算符,會(huì)把int?count設(shè)置為null,而不會(huì)拋出一個(gè)異常。

    int? count = customer.orders?.Count();

結(jié)合上一節(jié)討論的空合并操作符??與空條件運(yùn)算符?.可以在結(jié)果是null時(shí)設(shè)置一個(gè)默認(rèn)值。

    int? count = customer.orders?.Count() ?? 0;

空條件運(yùn)算符的另一個(gè)用途是觸發(fā)事件。第13章詳細(xì)討論了事件。觸發(fā)事件的最常見(jiàn)方法是使用如下代碼模式:

var onChanged = OnChanged; 

if (onChanged != null)

{

  onChanged(this, args);

}

這種模式不是線程安全的,因?yàn)橛腥藭?huì)在null檢查己經(jīng)完成后,退訂最后一個(gè)事件處理程序。此時(shí)會(huì)拋出異常,程序崩潰。使用空條件運(yùn)算符可以避免這種情形:

OnChanged?.Invoke{this, args);


在C:\BeginningCSharp7\Chapterl2\Chl2CardLib\Card.cs類(lèi)的=運(yùn)算符重載中,使用?.運(yùn)算符檢查null,可以避免在使用該方法時(shí)拋出異常。例如:

public static bool operator ==(Card cardlt Card card2)

    => (cardl?.suit == card2?.suit} && (cardl?.rank == card2?.rank);

在語(yǔ)句中包括空條件運(yùn)算符,就清楚地表示:如果左邊的對(duì)象(在本例中是rardl或card2)不為空,就檢索右邊的對(duì)象。如果左邊的對(duì)象為空(即cardl或card2),就終止訪問(wèn)鏈,返回null。


繼續(xù)查找其他問(wèn)題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部