Подтвердить что ты не робот

Где находится метод расширения 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 (например, методы расширения 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, поэтому я думаю, что все ОК.

Этот метод действительно существует в С# 3.5, и если да, то что я делаю неправильно?

4b9b3361

Ответ 1

Вы хотите использовать метод расширения Aggregate:

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

Для получения дополнительной информации см. MSDN. Он позволяет указать seed, а затем выражение для вычисления последовательных значений.

Ответ 2

Fold (aka Reduce) является стандартным термином от функционального программирования. По какой-то причине он получил имя Aggregate в LINQ.

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