Ich habe in den Linq-Beispielen von MSDN eine nette Methode namens Fold () gefunden, 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 dies weder in ihrem Beispiel noch in meinem eigenen Code kompilieren lassen, und ich kann nirgendwo anders in MSDN (wie Enumerable- oder Array-Erweiterungsmethoden) finden, die diese Methode erwähnen. Der Fehler, den ich bekomme, ist ein einfacher alter Fehler "Ich weiß nichts darüber":
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 verwende andere Methoden, von denen ich glaube, dass sie von Linq stammen (wie Select () und Where ()), und ich verwende "System.Linq", daher denke ich, dass alles in Ordnung ist.
Existiert diese Methode wirklich in C # 3.5, und wenn ja, was mache ich falsch?
Antworten:
Sie sollten die
Aggregate
Erweiterungsmethode verwenden:Weitere Informationen finden Sie unter MSDN . Hier können Sie einen
seed
und dann einen Ausdruck angeben , um aufeinanderfolgende Werte zu berechnen.quelle
Func
wird erst aufgerufen, wenn das zweite Element erreicht ist. Siehe: msdn.microsoft.com/en-us/library/vstudio/…ToString()
, um so eine Textdarstellung des gesamten Containers zurückzugeben.<double>
Typparameter wird vom Compiler nur automatisch abgeleitet und ist daher nicht erforderlich.p
undelem
kann jeder Typ sein, den du magst. Sehen Sie diese Überlastung, wie in diesem Beispiel verwendetFold (auch bekannt als Reduce) ist der Standardbegriff der funktionalen Programmierung. Aus irgendeinem Grund wurde es in LINQ Aggregate genannt .
quelle