一切正常,直到将唯一元素的序列传递给此函数。最简单的重现方式是:
var sumOfSquares = Enumerable.Range(5, 1).Aggregate((s, i) => s + i*i);
// sumOfSquares == 5
我认为这个版本的聚合应该在序列只包含一个元素的情况下抛出一个异常。 我是对的还是漏掉了一些细节?
最佳答案
那不应该失败。根据documentation :
The first element of source is used as the initial aggregate value.
所以在这种情况下,您只需返回第一个元素 (5),并且不会执行任何聚合。没有错误。
正如 Anthony Pegram 指出的那样,有 another overload您可以在其中指定聚合的种子值。将种子设置为 0 会给你答案 25,这可能是你想要的。
var sumOfSquares = Enumerable.Range(5, 1).Aggregate(0, (s, i) => s + i * i);
这里当然不应该使用 Aggregate - 您可以改用 Sum。
var sumOfSquares = Enumerable.Range(5, 1).Sum(i => i * i);
我想这只是一个简化的例子。
关于c# - Enumerable.Aggregate 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4464341/