添加Nullable int时保持null?

时间:2018-03-08 11:53:16

标签: c# nullable

我希望在所有值为int?时添加可为空的null并保留null

我希望得到这样的结果:

1 + 2 = 3
1 + null = 1
null + null = null
O + null = 0

问题是,如果我将值与null相加,则结果为null

int? i1 = 1;
int? i2 = null;
int? total = i1 + i2; // null

我见过这个帖子: Is there a more elegant way to add nullable ints?

使用linq:

var nums = new int?[] {null, null, null};
var total = nums.Sum(); // 0

我得0,我想要null ...

我找到的唯一方法是创建一个函数:

static int? Sum(params int?[] values)
{
  if (values.All(item => !item.HasValue))
    return null;
  else
    return values.Sum();
}

我有办法原生那样做吗?

1 个答案:

答案 0 :(得分:4)

一个选项可能是使用Aggregate的扩展方法。类似的东西:

public static int? NullableSum(this IEnumerable<int?> values)
{
    return values.Aggregate((int?)null, (sum, value)   
        => value.HasValue ? (sum ?? 0) + value : sum + 0);
}

功能方面它与自定义Sum方法完全相同,没有遍历数组两次。

基本上它将初始值设置为null,但只要它看到任何null值,它就会开始将null值视为0。

因此,如果所有输入为null,则返回null - 否则其行为与LINQ&#39; s Sum基本相同