19
在C#,如果我写与空类型+ =操作符在C#
int? x = null;
x += x ?? 1
我期望这是等效于:
int? x = null;
x = x + x ?? 1
因而在第一示例中,x
将包含1
,如第二个例子中所示。但它不,它包含null。未分配时,+ =运算符似乎不适用于可空类型。为什么会这样呢?
编辑:正如指出的那样,这是因为null + 1 = null
和运算符的优先级。在我的防守,我觉得这条线在MSDN是模糊的!:
预定义的一元和二元运营商和用户定义的任何 运营商存在的值类型也可以通过可空类型 使用。如果[或 的任一个操作数为空,则这些运算符产生空值;否则,操作员使用所包含的值来计算结果 。
+1啊,运算符优先级,我的古老的敌人。你再次击中! – JDB
不是'??'优先于'+'吗? (@ Servy的回答) –
@AustinSalonen Nope。 http://msdn.microsoft.com/en-us/library/6a71f45d.aspx –