我在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中是否真的存在,如果存在,我做错了什么?
答案 0 :(得分:114)
您需要使用Aggregate
扩展名方法:
double product = doubles.Aggregate(1.0, (prod, next) => prod * next);
有关详细信息,请参阅MSDN。它允许您指定seed
,然后指定表达式来计算连续值。
答案 1 :(得分:39)