【问题标题】:Why do i need to put the null-coalescing operator in brackets?为什么我需要将空合并运算符放在括号中?
【发布时间】:2013-06-28 15:29:09
【问题描述】:

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

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

但是v2.Value 是(期望的)1 而v1.Value 仍然是0。为什么?

Demo

【问题讨论】:

标签: c# .net operators nullable


【解决方案1】:

v1 是 0,原因正是您提到的:null-coalescing 运算符实际上具有相对较低的优先级。 This table 显示到底有多低。

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

【讨论】:

    【解决方案2】:

    v2 是说,1 加(如果 previousValue == null 将值 0 加到 1,得到 1。 v1 说 1 加 null 是 null 所以让我们把 0 还给我们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-26
      • 1970-01-01
      • 2020-06-20
      • 2014-04-10
      • 2014-08-09
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多