添加 Nullable int 时保持 null?
Keep null when adding Nullable int?
我想添加可为空的 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();
}
我有办法在本地做到这一点吗?
一个选项可能是使用 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 非 null
值,它就会开始处理 null
值为 0.
因此,如果 all 输入是 null
它 returns null
- 否则它的行为基本相同作为 LINQ 的 Sum
.
我想添加可为空的 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();
}
我有办法在本地做到这一点吗?
一个选项可能是使用 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 非 null
值,它就会开始处理 null
值为 0.
因此,如果 all 输入是 null
它 returns null
- 否则它的行为基本相同作为 LINQ 的 Sum
.