如果空合并操作中的所有参数都为null,结果是什么?

时间:2010-10-19 17:55:16

标签: c# null-coalescing-operator

此代码完成后,myObject的结果是什么?

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

myObject = null ?? yourObject;

3 个答案:

答案 0 :(得分:2)

myObject将为null

这会转换为 -

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

答案 1 :(得分:1)

coalesce运算符转换为:

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

因此你有什么:

myObject = null != null ? null : yourObject;

实际上这是毫无意义的,因为null总是为空。

答案 2 :(得分: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语言参考:

  
    

形式为a ??的空合并表达式b要求a为可空类型或引用类型。如果a是非null,则结果为?? b是一个;否则,结果是b。仅当a为null时,操作才会计算b。