当这段代码完成时,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