“折叠”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);