89 votes

Où se trouve la méthode d'extension "Fold" LINQ?

J'ai trouvé dans MSDN Linq échantillons soigné de la méthode appelée Fois() que je veux utiliser. Leur exemple:

double[] doubles = { 1.7, 2.3, 1.9, 4.1, 2.9 }; 
double product = 
     doubles.Fold((runningProduct, nextFactor) => runningProduct * nextFactor);

Malheureusement, je ne peux pas obtenir ce pour compiler, soit dans leur exemple ou dans mon propre code, et je ne peux pas trouver n'importe où ailleurs dans le site web MSDN (comme Énumérable ou le Tableau des méthodes d'extension) que la mention de cette méthode. L'erreur que j'obtiens est un simple vieux "ne savent pas à ce sujet" d'erreur:

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?)

Je suis en utilisant d'autres méthodes qui, je crois, viennent de Linq (comme Select() et Où()), et je suis "à l'aide du Système.Linq", donc je pense que tout est OK.

Cette méthode existent vraiment en C# 3.5, et si oui, ce que je fais mal?

119voto

Jason Points 11332

Vous voudrez utiliser la méthode d'extension Aggregate :

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

Voir MSDN pour plus d'informations. Il vous permet de spécifier un seed puis une expression pour calculer des valeurs successives.

40voto

Richard Berg Points 14218

Fold (aka Réduire) est le terme standard issu de la programmation fonctionnelle. Pour une raison quelconque, il a été nommé Aggregate dans LINQ.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X