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?

Foi útil?

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.

Outras dicas

Dobre (aka Reduzir) é o termo padrão de programação funcional. Por alguma razão, ele foi chamado Aggregate em LINQ.

double product = doubles.Aggregate(1.0, (runningProduct, nextFactor) => runningProduct* nextFactor);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top