Ken*_*Ken 89 c# linq reduce extension-methods
我在MSDN的Linq示例中找到了一个名为Fold()的简洁方法,我想使用它.他们的例子:
double[] doubles = { 1.7, 2.3, 1.9, 4.1, 2.9 };
double product =
doubles.Fold((runningProduct, nextFactor) => runningProduct * nextFactor);
Run Code Online (Sandbox Code Playgroud)
不幸的是,无论是在他们的示例中还是在我自己的代码中,我都无法进行编译,而且我在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?)
Run Code Online (Sandbox Code Playgroud)
我正在使用其他我认为来自Linq的方法(比如Select()和Where()),我正在"使用System.Linq",所以我认为一切都好.
这种方法确实存在于C#3.5中,如果是这样,我做错了什么?
Jas*_*son 119
您将需要使用Aggregate扩展方法:
double product = doubles.Aggregate(1.0, (prod, next) => prod * next);
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅MSDN.它允许您指定a seed然后表达式来计算连续值.
Ric*_*erg 40
Fold(aka Reduce)是函数式编程的标准术语.无论出于何种原因,它在LINQ中被命名为Aggregate.
double product = doubles.Aggregate(1.0, (runningProduct, nextFactor) => runningProduct* nextFactor);
Run Code Online (Sandbox Code Playgroud)