Ich habe eine Liste von Objekten. Eine Eigenschaft des einzelnen Objekteintrags ist der Betrag. Wie bekomme ich die Summe?
Wenn meine Liste vom Typ double wäre, könnte ich möglicherweise Folgendes tun:
double total = myList.Sum();
Ich möchte jedoch etwas Ähnliches, aber diese Syntax ist falsch.
double total = myList.amount.Sum();
Wie soll ich das erreichen? Ich würde gerne die Summenfunktion verwenden, wenn dies möglich ist, anstatt den Wert zu durchlaufen und zu berechnen.
Und wenn Sie dies für Elemente tun müssen, die einer bestimmten Bedingung entsprechen ...
quelle
Eine andere Alternative:
quelle
.Select(i => i.Moons).Sum()
Sie verwenden.Sum(i => i.Moons)
Hier ist ein Beispielcode, den Sie ausführen können, um einen solchen Test durchzuführen:
Das gleiche Beispiel für ein komplexes Objekt ist:
Meine Ergebnisse mit deaktivierten Compiler-Optimierungen sind:
und für den zweiten Test sind:
Es sieht so aus, als ob LINQ im Allgemeinen langsamer ist als foreach (...), aber was für mich seltsam ist, ist, dass foreach (...) schneller zu sein scheint als for loop.
quelle
Stopwatch
in an,System.Diagnostics
da es sich um einen Hochleistungs-Zeitrekorder handelt. (Ich habe dich übrigens nicht abgelehnt)DateTime.Now
zum Messen verwenden. Es hat eine schreckliche Leistung, da es immer Ortszeit zurückgibt.DateTime.UtcNow
ist schneller; Es wird jedoch immer noch nicht so hoch aufgelöst wie dieStopwatch
Klasse.