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

我在MSDN的Linq中find了一个我想使用的叫做Fold()的整洁方法。 他们的例子:

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

不幸的是,我无法得到这个编译,无论是在他们的例子或我自己的代码,我找不到在MSDN其他地方(如Enumerable或数组扩展方法)提到这种方法。 我得到的错误是一个普通的老“不知道任何关于”的错误:

 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”,所以我认为这一切都OK。

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

您将要使用Aggregate扩展方法:

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

有关更多信息,请参阅MSDN 。 它可以让你指定一个seed ,然后指定一个expression式来计算连续的值。

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

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