嗯,這是不太一樣的conditional operator,但我想你想的null coalescing operator的(??)。 (我猜你確實說過它是「相似的」:)請注意,「三元」只是指運算符的操作數的數量 - 所以當條件運算符是三元運算符時,空合併運算符是二元運算符。
它廣泛地採用這種形式:
result = first ?? second;
這裏second
如果first
爲null,將只進行評估。例如,它不一定是賦值的目標 - 您可以使用它來評估方法參數。
請注意,第一個操作數已將設爲空 - 但第二個操作數沒有。雖然圍繞轉換有一些具體細節,但在簡單情況下,整體表達式的類型是第二個操作數的類型。由於關聯性,可以整齊地堆疊操作的用途太:
int? x = GetValueForX();
int? y = GetValueForY();
int z = GetValueForZ();
int result = x ?? y ?? z;
注意如何x
和y
是空的,但z
和result
都沒有。當然,z
可能爲爲空,但result
也必須爲空。
基本上,操作數將按它們在代碼中出現的順序進行評估,評估在找到非空值時停止。
呵呵,雖然上面是以數值類型來表示的,但它也適用於參考類型(它們是總是可爲空)。
可能的重複 - > http:// stackoverflow。com/questions/463155/how-do-ternary-operator-work – 2010-10-13 16:14:31
@Junior但這是關於三元運算符,而這是關於合併運算符(儘管標題) – Rup 2010-10-13 16:16:18
@Junior,而我的問題的標題是如果你閱讀我的問題,你會發現它與你建議的重複無關。 – 2010-10-13 16:19:41