20

在 C# 中,如果我写

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

我希望这相当于:

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

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

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

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

4

1 回答 1

32

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

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
于 2012-10-03T15:41:11.083 回答