是否有一种更优雅的方法来添加无效的INT?
-
02-10-2019 - |
题
我需要添加许多类型无效的变量。我使用零合并操作员将其降低到每个行变量,但是我觉得有一种更简洁的方法可以做到这一点,例如我不能以某种方式将这些陈述链接在一起,我以前在其他情况下看到过这些陈述代码。
using System;
namespace TestNullInts
{
class Program
{
static void Main(string[] args)
{
int? sum1 = 1;
int? sum2 = null;
int? sum3 = 3;
//int total = sum1 + sum2 + sum3;
//int total = sum1.Value + sum2.Value + sum3.Value;
int total = 0;
total = total + sum1 ?? total;
total = total + sum2 ?? total;
total = total + sum3 ?? total;
Console.WriteLine(total);
Console.ReadLine();
}
}
}
解决方案
var nums = new int?[] {1, null, 3};
var total = nums.Sum();
这取决于 IEnumerable<Nullable<Int32>>
超载 的 Enumerable.Sum
方法,表现出您期望的。
如果您的默认值不等于零,则可以做:
var total = nums.Sum(i => i.GetValueOrDefault(myDefaultValue));
或速记:
var total = nums.Sum(i => i ?? myDefaultValue);
其他提示
total += sum1.GetValueOrDefault();
等等
只是直接回答这个问题:
int total = (sum1 ?? 0) + (sum2 ?? 0) + (sum3 ?? 0);
这样,使用A +,陈述被“链接”在一起
List<Nullable<int>> numbers = new List<Nullable<int>>();
numbers.Add(sum1);
numbers.Add(sum2);
numbers.Add(sum3);
int total = 0;
numbers.ForEach(n => total += n ?? 0);
这样,您可以拥有想要的数量。
如何处理辅助方法 -
static int Sum(params int?[] values)
{
int total = 0;
for(var i=0; i<values.length; i++) {
total += values[i] ?? 0;
}
return total;
}
IMO,不是很优雅,但至少在一口气中添加了您想要的数量数量。
total = Helper.Sum(sum1, sum2, sum3, ...);
你可以做
total += sum1 ?? 0;
total += sum2 ?? 0;
total += sum3 ?? 0;
怎么样 (sumX ?? 0)
为了 sumX
在相应的不可阻断的表达中?
using System;
namespace TestNullInts
{
class Program
{
static void Main(string[] args)
{
int? sum1 = 1;
int? sum2 = null;
int? sum3 = 3;
int total = 0;
total += (sum1 ?? 0) + (sum2 ?? 0) + (sum3 ?? 0);
Console.WriteLine(total);
Console.ReadLine();
}
}
}
Linq的最简单,最优雅的用法:
var list = new List<Nullable<int>> { 1, 2, null, 3 };
var sum = list.Sum(s => s ?? 0);
Console.WriteLine(sum);
您需要Colesce afaik来确保结果不可能。
不隶属于 StackOverflow