[英]Coalesce operator in C#?
我想我記得在 C# 中看到過類似於?: 三元運算符的東西,它只有兩個部分,如果它不為 null 則返回變量值,如果是則返回默認值。 像這樣的東西:
tb_MyTextBox.Text = o.Member ??SOME OPERATOR HERE?? "default";
基本上相當於這個:
tb_MyTextBox.Text = o.Member != null ? o.Member : "default";
這樣的事情是否存在或者我只是想象在某個地方看到這個?
是的:
tb_myTextBox.Text = o.Member ?? "default";
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-coalescing-operator
好吧,它與條件運算符不太一樣,但我認為您正在考慮空合並運算符(??)。 (我猜你確實說過它是“相似的” :) 請注意,“三元”只是指運算符的操作數 - 因此,雖然條件運算符是三元運算符,但空合並運算符是二元運算符。
它大致采用這種形式:
result = first ?? second;
這里的second
只有在first
為空時才會被評估。 它不必是賦值的目標 - 例如,您可以使用它來評估方法參數。
請注意,第一個操作數必須是可以為空的 - 但第二個不是。 盡管有一些關於轉換的具體細節,但在簡單的情況下,整個表達式的類型是第二個操作數的類型。 由於關聯性,您也可以巧妙地堆疊運算符的使用:
int? x = GetValueForX();
int? y = GetValueForY();
int z = GetValueForZ();
int result = x ?? y ?? z;
請注意x
和y
如何可以為空,但z
和result
不能。 當然, z
可以是可空的,但result
也必須是可空的。
基本上,操作數將按照它們在代碼中出現的順序進行評估,當發現非空值時評估停止。
哦,雖然上面是根據值類型顯示的,但它也適用於引用類型(它們總是可以為空的)。
有趣的是,您使用“??這里的某些操作員??”,因為您要查找的操作員是“??”,即:
tb_MyTextBox.Text = o.Member ?? "default";
是的,它被稱為 Null Coalescing 運算符:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.