Где находится метод расширения 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, и если да, то что я делаю неправильно?
Ответы
Ответ 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);