“折叠”LINQ扩展方法在哪里?

时间:2009-08-05 01:19:35

标签: c# linq extension-methods reduce

我在MSDN's Linq samples中找到了一个名为Fold()的简洁方法,我想使用它。他们的例子:

double[] doubles = { 1.7, 2.3, 1.9, 4.1, 2.9 }; 
double product = 
     doubles.Fold((runningProduct, nextFactor) => runningProduct * nextFactor); 

不幸的是,无论是在他们的示例中还是在我自己的代码中,我都无法编译它,而且我在MSDN中找不到任何其他地方(如Enumerable或Array扩展方法)。我得到的错误是一个简单的“不知道任何关于那个”的错误:

error CS1061: 'System.Array' does not contain a definition for 'Fold' and no 
extension method 'Fold' accepting a first argument of type 'System.Array' could 
be found (are you missing a using directive or an assembly reference?)

我正在使用其他我认为来自Linq的方法(如Select()和Where()),我正在“使用System.Linq”,所以我认为一切都好。

这种方法在C#3.5中是否真的存在,如果存在,我做错了什么?

2 个答案:

答案 0 :(得分:114)

您需要使用Aggregate扩展名方法:

double product = doubles.Aggregate(1.0, (prod, next) => prod * next);

有关详细信息,请参阅MSDN。它允许您指定seed,然后指定表达式来计算连续值。

答案 1 :(得分:39)

Fold(又名Reduce)是函数式编程的标准术语。无论出于何种原因,它在LINQ中被命名为Aggregate

double product = doubles.Aggregate(1.0, (runningProduct, nextFactor) => runningProduct* nextFactor);