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

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

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

不幸的是,无论是在他们的示例中还是在我自己的代码中,我都无法编译这个方法,而且我在 MSDN 中找不到任何其他提到这个方法的地方(比如枚举或数组扩展方法)。我得到的错误是一个普通的老式“不知道任何关于那个”错误:

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”。所以我觉得没什么问题。

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

40580 次浏览

Fold (aka Reduce) is the standard term from functional programming. For whatever reason, it got named Aggregate in LINQ.

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

You will want to use the Aggregate extension method:

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

See MSDN for more information. It lets you specify a seed and then an expression to calculate successive values.