【问题标题】:What is the result if all parameters in a null coalescing operation are null?如果空合并操作中的所有参数都为空,结果是什么?
【发布时间】:2010-10-19 17:55:16
【问题描述】:

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

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

myObject = null ?? yourObject;

【问题讨论】:

  • 您可以随时尝试看看,而不是在这里问...您期望结果是什么?
  • 我认为这是一个有趣的问题,尽管对于更有经验的开发人员来说答案是显而易见的。无论如何,Stack Overflow 的存在是为了回答困难和琐碎的问题,我认为应该鼓励(非冗余)简单问题。
  • @leppie 现在,您的意思是“null”中的 null 还是“undefined”中的 null? ;-)
  • ?? Null Coalescing Operator --> What does coalescing mean? 的可能重复项我投票决定关闭,因为可以在此处和其他相关帖子中找到答案。
  • @pst,我查看了那个帖子,并没有在英文术语“coalesce”的定义中找到答案,尽管它可能被埋没了。

标签: c# null-coalescing-operator


【解决方案1】:

myObject 将为空

这被翻译成 -

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

【讨论】:

    【解决方案2】:

    合并运算符转换为:

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

    因此你有什么:

    myObject = null != null ? null : yourObject;
    

    这实际上毫无意义,因为 null 将始终为 null。

    【讨论】:

    • 当然,我的示例非常简单且不切实际。谢谢你的解释。
    • 是的,我意识到这一点。合并运算符的重点是提供一个值以在某些内容为 null 时使用......很有可能,因此如果您尝试使用该值,则不会得到 null 引用异常。一个例子: someString = (someString ?? "").ToLower();
    • 这对于将可空类型分配给不可空类型也很有用。示例:int? x = 1;整数 y = x ?? -1;如果您尝试将 y 分配给 x 而不使用 ??或者做 x.Value 你会得到一个错误。如果你做了 x.Value 并且值为 null 那么你也有麻烦了。
    【解决方案3】:

    只是为了好玩,这里有一张小桌子:

    一种 ?? B -> R --------------------- 一种 ??任何->一个;其中 a 不为空 空值 ?? b -> b;对于任何 b 空值 ??空->空;从前面暗示

    因为?? 只是一个(惊喜!)右关联中缀运算符,x ?? y ?? z --> x ?? (y ?? z)。像&&||一样,??也是短路操作。

    ...来自?? Operator (C# Reference):

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

    ...来自 C# 3.0 语言参考:

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

    【讨论】:

      猜你喜欢
      • 2019-12-24
      • 2015-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-16
      • 1970-01-01
      • 1970-01-01
      • 2015-01-01
      相关资源
      最近更新 更多