我不知道我是否遗漏了一些简单的东西,我有这个有效的例子:
int[] x = new int[] {1, 2, 3, 5, 6, 7};
int[] arrayToUse = x.Where(i => i > 4).ToArray<int>();
int sum = arrayToUse.Sum();
Console.WriteLine(sum.ToString());
我想知道 - 有没有办法将这两者结合起来:
int[] arrayToUse = x.Where(i => i > 4).ToArray<int>();
int sum = arrayToUse.Sum();
为了获得一个会立即返回总和的表达式?
答案 0 :(得分:3)
只需:
int sum = x.Where(i => i > 4).Sum();
如果您调用ToArray
,则会将所有数据复制到新的数组对象,但如果您不需要,请将其保留。 Sum
适用于任何IEnumerable<int>
(以及其他数字类型),无需在那里创建中间数组。
无论如何,如果你致电ToArray
,你可以省略<int>
部分,因为编译器可以推断类型参数{{ 1}},在这种情况下很容易。
执行int
时,您不必对整数执行Console.WriteLine
; ToString
有一个带有WriteLine
(无拳击)的重载,它会自动调用int
。
答案 1 :(得分:2)
您可以使用:
int sum = x.Where(i => i > 4).Sum();
答案 2 :(得分:2)
在计算总和之前,无需将过滤后的列表转换为中间数组。你可以这样做:
int[] x = new int[] {1, 2, 3, 5, 6, 7};
int sum = x.Where(i => i > 4).Sum();
Console.WriteLine(sum);
现在我不建议将其用于生产代码,因为它的可读性较低,并且它无法以任何有意义的方式提高性能,但您甚至可以通过单个函数调用来实现这一点:
int[] x = new int[] {1, 2, 3, 5, 6, 7};
int sum = x.Sum(i => i > 4 ? i : 0);
Console.WriteLine(sum);