Frage

Ich fand in MSDN Linq Proben eine saubere Methode aufgerufen falten (), die ich verwenden möchte. Ihr Beispiel:

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

Leider kann ich nicht bekommen diese, zu kompilieren, entweder in ihrem Beispiel oder in meinem eigenen Code, und ich kann nirgendwo anders in MSDN (wie Enumerable oder Array-Erweiterungsmethoden), die nennen diese Methode finden. Der Fehler, den ich bekommen, ist eine gute alte Fehler „nichts über das wissen“:

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

Ich bin mit anderen Methoden, die ich von Linq kommen glaube (wie Select () und wo ()), und ich bin „mit System.Linq“, so dass ich denke, das ist alles in Ordnung.

Ist diese Methode gibt es in C # 3.5 wirklich, und wenn ja, was mache ich falsch?

War es hilfreich?

Lösung

Sie wollen die Aggregate Erweiterungsmethode verwenden:

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

Siehe MSDN für weitere Informationen. Damit können Sie eine seed angeben und dann einen Ausdruck aufeinanderfolgende Werte zu berechnen.

Andere Tipps

Falten (aka Reduce) ist der Standard-Begriff aus dem funktionalen Programmierung. Aus irgendeinem Grund wurde es genannt Aggregate LINQ.

double product = doubles.Aggregate(1.0, (runningProduct, nextFactor) => runningProduct* nextFactor);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top