Question

J'ai trouvé dans les exemples Linq de MSDN une méthode soignée appelée Pliez () 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 cette compilation, ni dans leur exemple, ni dans mon propre code, et je ne trouve nulle part ailleurs dans MSDN (comme les méthodes d'extension Enumerable ou Array) qui mentionnent cette méthode. L’erreur que j’obtiens est un vieil homme "Je ne sais rien à ce sujet" 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?)

J'utilise d'autres méthodes qui, je crois, viennent de Linq (comme Select () et Where ()), et j'utilise "System.Linq", donc je pense que tout va bien.

Cette méthode existe-t-elle vraiment en C # 3.5, et si oui, qu'est-ce que je fais mal?

Était-ce utile?

La solution

Vous souhaiterez 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 les valeurs successives.

Autres conseils

Fold (ou Réduire) est le terme standard utilisé en programmation fonctionnelle. Pour une raison quelconque, il a été nommé Agréger dans LINQ.

double product = doubles.Aggregate(1.0, (runningProduct, nextFactor) => runningProduct* nextFactor);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top