我试图用NULL Coalesce
将几个整数加在一起,其中至少有两个整数可能为为NULL,在这种情况下,将0分配给这些整数,然后添加。第一个非空变量的空合并返回值
var total = votes[0].Value ?? 0 + votes[1].Value ?? 0 + votes[2].Value ?? 0 + votes[3].Value ?? 0;
total
返回votes[0].Value
,而不是另外四个变量的值。
有没有一种方法可以得到所有整数的总和?
我试图用NULL Coalesce
将几个整数加在一起,其中至少有两个整数可能为为NULL,在这种情况下,将0分配给这些整数,然后添加。第一个非空变量的空合并返回值
var total = votes[0].Value ?? 0 + votes[1].Value ?? 0 + votes[2].Value ?? 0 + votes[3].Value ?? 0;
total
返回votes[0].Value
,而不是另外四个变量的值。
有没有一种方法可以得到所有整数的总和?
该代码等同于:
var total = votes[0].Value ?? (0 + votes[1].Value ?? (0 + votes[2].Value ?? (0 + votes[3].Value ?? 0)));
因此,它应该是相当明显的,现在为什么它返回votes[0].Value
,而不是所有的非空值的总和。
如果票为空整数数组,你可以这样写:
var votes = new int?[] {1, 2, 3, 4};
var total = (votes[0] ?? 0) + (votes[1] ?? 0) + (votes[2] ?? 0) + (votes[3] ?? 0);
这是清洁剂,它会跳过空值:
var total = votes.Sum();
'votes.Sum()'更清洁。 – PetSerAl
谢谢。我认为这不适用于空值,但它确实如此。 – CodingYoshi
var total = votes.Sum();
它会算空值为零。
“空值为零”:虽然这对于“Sum”有效,但更通用的说它跳过空值。这样,它也适用于“平均”等。 (但是,当然不是“伯爵”。) –
你确定数组有你认为它的值吗?如果你打破它,并检查它们的值... –
是的,当我在调试器中通过时。 – hello
[C#空合并(??)运算符的运算符优先级是什么?](可能重复的问题](http://stackoverflow.com/questions/511093/what-is-the-operator-precedence-of-c-sharp -null-coalescing-operator) –