J'ai trouvé dans les échantillons Linq de MSDN une méthode soignée appelée Fold () 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 le faire compiler, que ce soit dans leur exemple ou 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 une vieille erreur "Je ne sais rien de cette":
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 de mal?
Réponses:
Vous voudrez utiliser la
Aggregate
méthode d'extension:Consultez MSDN pour plus d'informations. Il vous permet de spécifier un
seed
puis une expression pour calculer des valeurs successives.la source
Func
n'est appelé qu'une fois le deuxième élément atteint. Voir: msdn.microsoft.com/en-us/library/vstudio/…ToString()
, ainsi renvoyer une représentation textuelle de l'ensemble du conteneur.<double>
paramètre type est simplement automatiquement déduit par le compilateur et n'est donc pas nécessaire.p
etelem
peut être le type que vous aimez. Voir cette surcharge utilisée dans cet exempleFold (aka Réduire) est le terme standard de la programmation fonctionnelle. Pour une raison quelconque, il a été nommé Aggregate dans LINQ.
la source