我想添加可为空的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
我看过这个线程:有没有更优雅的方法来添加可为空的整数? https://stackoverflow.com/questions/3599413/is-there-a-more-elegant-way-to-add-nullable-ints
使用林克:
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();
}
我有办法在本地做到这一点吗?
一种选择可能是使用扩展方法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
,但只要它看到any non null
值它开始治疗null
值为 0。
因此,如果all输入是null
它返回null
- 否则它的行为方式与 LINQ 基本相同Sum
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)