當這段代碼完成時,myObject
的結果是什麼?如果空合併操作中的所有參數都爲空,結果如何?
object myObject = "something";
object yourObject = null;
myObject = null ?? yourObject;
當這段代碼完成時,myObject
的結果是什麼?如果空合併操作中的所有參數都爲空,結果如何?
object myObject = "something";
object yourObject = null;
myObject = null ?? yourObject;
myObject的將是無效
這被翻譯成 -
if (null == null)
myObject = yourObject;
else
myObject = null;
聚結運營商轉換到這一點:
x ?? y
x != null ? x : y
因此,你擁有的一切:
myObject = null != null ? null : yourObject;
這實際上是毫無意義的,因爲null將始終爲空。
當然我的例子是非常簡單和不現實的。謝謝你的解釋。 – Brad 2010-10-19 18:09:18
是的,我意識到這一點。 coalesce運算符的要點是提供一個值,以便在某些內容爲null時使用......如果您嘗試並使用該值,那麼您可能不會收到空引用異常。例如:someString =(someString ??「」).ToLower(); – Dismissile 2010-10-19 18:15:18
將可爲空類型分配給不可空類型也很有用。例如:int?x = 1; int y = x ?? -1;如果您嘗試將y分配給x而不使用??或做x.Value你會得到一個錯誤。如果你做了x.Value並且它的值爲null,那麼你也遇到了麻煩。 – Dismissile 2010-10-19 18:18:48
只是踢,這裏是一個小桌子:
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。
你總是可以試試看,而不是問這裏......你會希望結果是什麼? – thecoop 2010-10-19 18:00:24
答案爲空。 – leppie 2010-10-19 18:01:59
我認爲這是一個有趣的問題,即使對於更有經驗的開發人員來說答案是顯而易見的。無論如何,堆棧溢出的存在是爲了回答困難以及微不足道的問題,我認爲(非冗餘)簡單的問題應該受到鼓勵。 – 2010-10-19 18:07:41