Onde está o “Fold” LINQ Método de extensão?
-
22-07-2019 - |
Pergunta
eu encontrei em amostras Linq do MSDN um método pura chamada Dobre () que eu quero usar. O seu exemplo:
double[] doubles = { 1.7, 2.3, 1.9, 4.1, 2.9 };
double product =
doubles.Fold((runningProduct, nextFactor) => runningProduct * nextFactor);
Infelizmente, eu não posso chegar a este compilar, quer no seu exemplo ou no meu próprio código, e eu não consigo encontrar em qualquer outro lugar no MSDN (como Enumerable ou métodos de extensão Array) que mencionam este método. O erro que eu vejo é uma planície velho "não sei nada sobre isso" erro:
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?)
Eu estou usando outros métodos que eu acredito que vêm de Linq (como Select () e onde ()), e eu estou "usando System.Linq", então eu acho que é tudo OK.
Será que este método realmente existem em C # 3.5, e em caso afirmativo, o que estou fazendo de errado?
Solução
Você vai querer usar o método de extensão Aggregate
:
double product = doubles.Aggregate(1.0, (prod, next) => prod * next);
MSDN para obter mais informações. Ele permite que você especifique um seed
e depois uma expressão para calcular os valores sucessivos.