在C#中,如果我写
int? x = null;
x += x ?? 1
我希望这相当于:
int? x = null;
x = x + x ?? 1
因此在第一个示例中,x
将包含1
,如第二个示例中所示。但它没有,它包含null。 + =运算符在尚未分配时似乎不适用于可空类型。为什么会出现这种情况?
编辑:正如所指出的,这是因为null + 1 = null
和运营商优先级。在我的辩护中,我认为MSDN中的这一行是模棱两可的!:
预定义的一元和二元运算符以及任何用户定义的 存在于值类型的运算符也可以由nullable使用 类型。如果 [之一] ,这些运算符会产生空值 操作数为null;否则,运算符使用包含的值 计算结果。
答案 0 :(得分:33)
以下是两个陈述之间的区别:
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