Вопрос

Я нашел в примеры из 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, поэтому я думаю, что все в порядке.

Действительно ли этот метод существует в C # 3.5, и если да, что я делаю не так?

Это было полезно?

Решение

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

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

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

Другие советы

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

double product = doubles.Aggregate(1.0, (runningProduct, nextFactor) => runningProduct* nextFactor);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top