繁体   English   中英

C#中具有可空类型的+ =运算符

[英]The += operator with nullable types in C#

在C#中,如果我写的话

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

我希望这相当于:

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

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

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

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

以下是两个陈述之间的区别:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM