簡體   English   中英

C# 中的合並運算符?

[英]Coalesce operator in C#?

我想我記得在 C# 中看到過類似於?: 三元運算符的東西,它只有兩個部分,如果它不為 null 則返回變量值,如果是則返回默認值。 像這樣的東西:

tb_MyTextBox.Text = o.Member ??SOME OPERATOR HERE?? "default";

基本上相當於這個:

tb_MyTextBox.Text = o.Member != null ? o.Member : "default";

這樣的事情是否存在或者我只是想象在某個地方看到這個?

好吧,它與條件運算符不太一樣,但我認為您正在考慮空合並運算符(??)。 (我猜你確實說過它是“相似的” :) 請注意,“三元”只是指運算符的操作數 - 因此,雖然條件運算符是三元運算符,但空合並運算符是二元運算符。

它大致采用這種形式:

result = first ?? second;

這里的second只有在first為空時才會被評估。 它不必是賦值的目標 - 例如,您可以使用它來評估方法參數。

請注意,第一個操作數必須是可以為空的 - 但第二個不是。 盡管有一些關於轉換的具體細節,但在簡單的情況下,整個表達式的類型是第二個操作數的類型。 由於關聯性,您也可以巧妙地堆疊運算符的使用:

int? x = GetValueForX();
int? y = GetValueForY();
int z = GetValueForZ();

int result = x ?? y ?? z;

請注意xy如何可以為空,但zresult不能。 當然, z可以是可空的,但result也必須是可空的。

基本上,操作數將按照它們在代碼中出現的順序進行評估,當發現非空值時評估停止。

哦,雖然上面是根據值類型顯示的,但它也適用於引用類型(它們總是可以為空的)。

有趣的是,您使用“??這里的某些操作員??”,因為您要查找的操作員是“??”,即:

tb_MyTextBox.Text = o.Member ?? "default";

http://msdn.microsoft.com/en-us/library/ms173224.aspx

是的,它被稱為 Null Coalescing 運算符:

?? 運算符(C# 參考)(MSDN)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM