【问题标题】:The += operator with nullable types in C#C# 中具有可为空类型的 += 运算符
【发布时间】:2012-09-24 14:02:18
【问题描述】:

在 C# 中,如果我写

int? x = null;
x += x ?? 1

我希望这相当于:

int? x = null;
x = x + x ?? 1

因此在第一个示例中,x 将包含1,如第二个示例中所示。但它没有,它包含空值。 += 运算符在未分配时似乎不适用于可空类型。为什么会这样?

编辑:正如所指出的,这是因为null + 1 = null 和运算符优先级。在我的辩护中,我认为MSDN 中的这一行是模棱两可的!:

预定义的一元和二元运算符以及任何用户定义的 为值类型存在的运算符也可以由 nullable 使用 类型。如果 [either of] 操作数为空;否则,操作员使用包含的值 计算结果。

【问题讨论】:

    标签: c# operators nullable


    【解决方案1】:

    以下是这两种说法的区别:

    x += x ?? 1
    x = (x + x) ?? 1
    

    第二个不是你所期望的。

    以下是它们的分类:

    x += x ?? 1
    x += null ?? 1
    x += 1
    x = x + 1
    x = null + 1
    x = null
    
    x = x + x ?? 1
    x = null + null ?? 1
    x = null ?? 1
    x = 1
    

    【讨论】:

    • +1 啊,运算符优先级,我的宿敌。你又罢工了!
    • ?? 不是优先于+ 吗? (@Servy 的回答)
    • 啊,我无法理解 null + 1 = null。错过了 MSDN 中的这一行:预定义的一元和二元运算符以及为值类型存在的任何用户定义的运算符也可能被可空类型使用。如果操作数为空,则这些运算符产生空值;否则,运算符使用包含的值来计算结果。
    猜你喜欢
    • 2016-09-26
    • 2013-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    相关资源
    最近更新 更多