要注意null合并运算符的优先级比+还要低
Contents
null合并运算符是一个非常有用的运算符,有了它可以让代码非常简洁,省去了很多繁琐的空检查,但是有一点要注意的是它的优先级比加号还要低,可以参见Eric Lippert写的这篇Null Coalescing Bugs in C#,所以在和别的运算符用在一起时要记得加括号。
假设有如下的代码:
1 | int? a = null; |
他的输出结果是2,而不是3!原因就是因为??
的优先级比+
还要低,所以上面的语句相当于a ??( (1 + b) ?? 2)
。就是说,首先看a
是null
,所以应该取(1 + b) ?? 2
。而(1 + b)
还是null
,所以结果是2。
如果想让结果为3,需要这么写(a ?? 1) + (b ?? 2)
。