为什么我需要将null合并运算符放在括号中?

时间:2013-06-28 15:29:09

标签: c# .net operators nullable

我最近注意到了一种好奇心(至少对我而言)。我认为null-coalescing operator会优先于任何数学运算,但显然我错了。我认为以下两个变量在最后会有相同的值:

double? previousValue = null;
double? v1 = 1 + previousValue ?? 0;
double? v2 = 1 + (previousValue ?? 0);

但是v2.Value是(所需的)1而v1.Value仍为0.为什么?

Demo

2 个答案:

答案 0 :(得分:8)

由于您提到的确切原因,

v1为0:null-coalescing运算符实际上具有相对较低的优先级。 This table显示了究竟有多低。

因此,对于第一个表达式,首先计算1 + null,然后计算为null int?,然后合并为0.

答案 1 :(得分:1)

v2说,1加(如果previousValue == null将值0加1,则给出1.The v1表示1加上null为null所以让我们给出0。