2016-12-30 86 views
-1

我试图用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,而不是另外四个变量的值。

有没有一种方法可以得到所有整数的总和?

+0

你确定数组有你认为它的值吗?如果你打破它,并检查它们的值... –

+0

是的,当我在调试器中通过时。 – hello

+3

[C#空合并(??)运算符的运算符优先级是什么?](可能重复的问题](http://stackoverflow.com/questions/511093/what-is-the-operator-precedence-of-c-sharp -null-coalescing-operator) –

回答

1

该代码等同于:

var total = votes[0].Value ?? (0 + votes[1].Value ?? (0 + votes[2].Value ?? (0 + votes[3].Value ?? 0))); 

因此,它应该是相当明显的,现在为什么它返回votes[0].Value,而不是所有的非空值的总和。

1

如果为空整数数组,你可以这样写:

var votes = new int?[] {1, 2, 3, 4}; 
var total = (votes[0] ?? 0) + (votes[1] ?? 0) + (votes[2] ?? 0) + (votes[3] ?? 0); 
0

这是清洁剂,它会跳过空值:

var total = votes.Sum(); 
+0

'votes.Sum()'更清洁。 – PetSerAl

+0

谢谢。我认为这不适用于空值,但它确实如此。 – CodingYoshi

4
var total = votes.Sum(); 

它会算空值为零。

+1

“空值为零”:虽然这对于“Sum”有效,但更通用的说它跳过空值。这样,它也适用于“平均”等。 (但是,当然不是“伯爵”。) –