1

我不知道我是否遗漏了一些简单的东西,我有这个工作示例:

    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();

为了得到一个可以立即返回总和的表达式?

4

3 回答 3

4

只是:

int sum = x.Where(i => i > 4).Sum();

如果您调用ToArray,这会将所有数据复制到一个新的数组对象中,但如果您不需要它,请忽略它。Sum适用于任何IEnumerable<int>(和其他数字类型),无需在那里制作中间数组。

无论如何,如果您调用ToArray,则可以省略该<int>部分,因为编译器可以推断类型参数,int,在这种情况下很容易。

当你这样做时Console.WriteLine,你不必ToString对整数做;WriteLine有一个重载int(没有装箱),它会ToString自动调用。

于 2013-10-25T20:28:59.367 回答
2

您可以使用:

int sum = x.Where(i => i > 4).Sum();
于 2013-10-25T20:28:48.430 回答
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);
于 2013-10-25T20:29:06.823 回答