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

C# 如果空合并操作中的所有参数都为空,结果会是什么?,c#,null-coalescing-operator,C#,Null Coalescing Operator,此代码完成后,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
的结果是什么

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;

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

只是为了好玩,这里有一个小表格:

A ?? B -> R --------------------- a ?? any -> a; where a is not-null null ?? b -> b; for any b null ?? null -> null; implied from previous A.B->R --------------------- A.任何->a;其中a不为null 无效的b->b;对于任何b 无效的空->空;前文暗示 由于
只是一个(令人惊讶的!)右关联中缀运算符,
x??Yz
-->
x??(y??z)
。与
&&
|
一样,
??
也是一种短路操作

…来自:

如果左操作数不为空,则返回左操作数(?);否则返回正确的操作数

…来自C#3.0语言参考:

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


你可以试试看,而不是在这里问。。。你期望结果是什么?我认为这是一个有趣的问题,尽管答案对于经验丰富的开发人员来说是显而易见的。无论如何,堆栈溢出的存在是为了回答困难和琐碎的问题,我认为应该鼓励(非冗余的)简单问题。@leppie现在,你是说“null”中的null还是“undefined”中的null?;-)可能重复我投票关闭,因为答案可以在这里和其他相关帖子中找到。@pst,我看了那篇帖子,没有找到答案,尽管答案可能隐藏在英语术语“联合”的定义中。当然,我的例子非常简单,不现实。谢谢你的解释。是的,我知道。coalesce运算符的要点是提供一个值,以便在某个值为null时使用……这样,如果尝试使用该值,就不会出现null引用异常。例如:someString=(someString??).ToLower();它还可用于将可空类型分配给不可空类型。例子:int?x=1;int y=x-1.如果您试图在不使用??或者做x.Value你会得到一个错误。如果你做了x.Value,而这个值是空的,那么你也有麻烦了。