是什么导致sum
始终为null
?
object[] data = new object[]
{
2.2M,
3m,
1,
"string",
true,
false,
2.3f
};
decimal? sum = null;
foreach (object x in data)
{
if (x is decimal d)
sum += d;
}
答案 0 :(得分:4)
这里最简单的选择是使用null coalsecing运算符??
:
decimal? sum = null;
foreach (object x in data)
{
if (x is decimal d)
sum = (sum ?? 0) + d;
}
但你也可以使用LINQ:
var elements = data.OfType<decimal>();
decimal? sum = (elements.Any() ? (decimal?)elements.Sum() : null);
答案 1 :(得分:4)
为什么不是专门为此设计的好的 Linq ?
object[] data = new object[] {
2.2M,
3m,
1,
"string",
true,
false,
2.3f };
// If you want 2.2m + 3m == 5.2
var sum = data
.OfType<decimal?>() // we want decimal only: 2.2M as well as 3m
.Sum(); // summed up
修改:如果您想在空的过滤集合上获取null
(而不是0m
)(即当集合没有时)任何decimal
个项目我们必须修改聚合:
var sum = data
.OfType<decimal?>()
.Aggregate((decimal?)null,
(s, a) => s == null ? a : s + a);