Die ToList-Methode ist eine mit LINQ verwendete Erweiterungsmethode, aber die ForEach-Methode ist nur eine Methode in der List-Klasse.
Der Haupt-Overhead ist hier der Aufruf der ToList-Methode, die eine neue Liste aus der Sammlung erstellt. Das ForEach hat auch einen geringen Overhead, da es einen Delegaten für jedes Element aufrufen muss.
Wenn Sie LINQ-Methoden verwenden möchten, scheint die Aggregatmethode besser geeignet zu sein:
%Vor%oder Summe:
%Vor%Sie haben entweder einen leichten Overhead gegenüber Ihrer ursprünglichen Version. Wenn Sie also am effizientesten arbeiten möchten, halten Sie sich einfach an eine einfache Schleife.
Der Overhead wird die Sammlung zweimal durchlaufen.
%Vor%ToList führt die Iteration nicht wie die meisten LINQ-Anweisungen auf träge Weise aus. Daher wird der Code gezwungen, zweimal über die Auflistung zu iterieren.
Im Allgemeinen scheint das LINQ-Formular besser zu lesen, aber wenn Sie sich Sorgen um die Leistung machen, vermeiden Sie es besser.
ForEach
ist nicht Teil von LINQ - es ist Teil der List<T>
API und ist seit .NET 2.0.
Der Grund dafür, dass es nicht Teil von LINQ ist, ist, dass es sich um eine natürlich nebenwirkende Methode handelt ... und LINQ fördert keine Nebenwirkungen.
Die Verwendung von Sum ist hier die richtige Lösung, aber Sie müssen zuerst keine Liste erstellen:
%Vor% Tu es nicht so.
Die ToList()
hier wird eine neue Liste zuweisen und füllen, IMHO nicht notwendig.
Während es eine triviale Übung ist, eine ForEach-Erweiterungsmethode zu schreiben, um über jedes Objekt zu iterieren, das IEnumberable implementiert, würde ich davon abraten (siehe diesen Artikel von Eric Lippert foreach Vs ForEach ).
Ich würde mit der foreach gehen.
P.S. Sie müssen IncrementTot initialisieren (Entschuldigung, ich konnte mir nicht helfen)