【问题标题】:Null Coalesce returning value of first non null variable空合并返回第一个非空变量的值
【发布时间】:2017-05-15 04:04:24
【问题描述】:

我正在尝试使用NULL Coalesce 将多个整数相加,其中至少有 2 个整数可能为 NULL,在这种情况下,将 0 分配给这些整数然后相加。

var total = votes[0].Value ?? 0 + votes[1].Value ?? 0 + votes[2].Value ?? 0 + votes[3].Value ?? 0;

total 返回votes[0].Value 的值,而不是所有四个变量的相加。

有什么方法可以得到所有整数的总和吗?

【问题讨论】:

标签: c# null-coalescing-operator


【解决方案1】:

这样更简洁,它会跳过空值:

var total = votes.Sum();

【讨论】:

  • 谢谢。我认为这不适用于空值,但确实如此。
【解决方案2】:
var total = votes.Sum();

它将空值计数为零。

【讨论】:

  • "null values as zero":虽然这对于Sum 来说实际上是正确的,但更一般的说法是它跳过了 null 值。这样,它也适用于Average 和其他人。 (但是,当然不是Count。)
【解决方案3】:

如果 votes 是一个可以为空的整数数组,你可以这样写:

var votes = new int?[] {1, 2, 3, 4};
var total = (votes[0] ?? 0) + (votes[1] ?? 0) + (votes[2] ?? 0) + (votes[3] ?? 0);

【讨论】:

    【解决方案4】:

    该代码相当于:

    var total = votes[0].Value ?? (0 + votes[1].Value ?? (0 + votes[2].Value ?? (0 + votes[3].Value ?? 0)));
    

    所以现在应该很清楚为什么它返回 votes[0].Value 而不是所有非空值的总和。

    【讨论】:

      猜你喜欢
      • 2017-09-02
      • 1970-01-01
      • 1970-01-01
      • 2019-12-07
      • 1970-01-01
      • 2011-08-13
      • 2018-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多