2010-10-19 68 views
3

當這段代碼完成時,myObject的結果是什麼?如果空合併操作中的所有參數都爲空,結果如何?

object myObject = "something"; 
object yourObject = null; 

myObject = null ?? yourObject; 
+5

你總是可以試試看,而不是問這裏......你會希望結果是什麼? – thecoop 2010-10-19 18:00:24

+0

答案爲空。 – leppie 2010-10-19 18:01:59

+3

我認爲這是一個有趣的問題,即使對於更有經驗的開發人員來說答案是顯而易見的。無論如何,堆棧溢出的存在是爲了回答困難以及微不足道的問題,我認爲(非冗餘)簡單的問題應該受到鼓勵。 – 2010-10-19 18:07:41

回答

2

myObject的將是無效

這被翻譯成 -

if (null == null) 
    myObject = yourObject; 
else 
    myObject = null; 
1

聚結運營商轉換到這一點:

x ?? y 
x != null ? x : y 

因此,你擁有的一切:

myObject = null != null ? null : yourObject; 

這實際上是毫無意義的,因爲null將始終爲空。

+0

當然我的例子是非常簡單和不現實的。謝謝你的解釋。 – Brad 2010-10-19 18:09:18

+0

是的,我意識到這一點。 coalesce運算符的要點是提供一個值,以便在某些內容爲null時使用......如果您嘗試並使用該值,那麼您可能不會收到空引用異常。例如:someString =(someString ??「」).ToLower(); – Dismissile 2010-10-19 18:15:18

+1

將可爲空類型分配給不可空類型也很有用。例如:int?x = 1; int y = x ?? -1;如果您嘗試將y分配給x而不使用??或做x.Value你會得到一個錯誤。如果你做了x.Value並且它的值爲null,那麼你也遇到了麻煩。 – Dismissile 2010-10-19 18:18:48

1

只是踢,這裏是一個小桌子:

 
A ?? B -> R 
--------------------- 
a ?? any -> a; where a is not-null 
null ?? b -> b; for any b 
null ?? null -> null; implied from previous 

而且由於??只是一個(驚喜!)權相關的管道符,x ?? y ?? z - >x ?? (y ?? z)。像&&||,??也是短路操作。

...從?? Operator (C# Reference)

它(??)返回左邊的操作數,如果它不爲空;否則它返回右操作數。

...從C#3.0語言參考:

空聚結形式的表達?? b要求a是可空類型或引用類型。如果a是非空的,則結果爲?? b是a;否則,結果是b。僅當a爲空時,操作纔會評估b。