Ich weiß, dass, wenn ich &&
oder ||
Operatoren zusammen in der gleichen Anweisung ketten, C# aufhören wird, die Anweisung zu berechnen und das entsprechende Ergebnis zurückgibt, wenn es einen Ausdruck evaluiert und egal was die folgenden Ausdrücke sind, wird das Ergebnis nicht ändern. Zum Beispiel:Beendet die C# LINQ-Aggregatmethode die Ausführung, sobald das Ergebnis nicht mehr geändert werden kann?
var result = false && foo() && bar();
In dieser Erklärung foo()
und bar()
nie da der Ausdruck ausgeführt werden sollen zunächst falsch ist. Meine Frage ist, wird die Enumerable.Aggregate<TSource, TAccumulate>
das Gleiche tun, wenn über eine Liste von Bools lief oder wird es alle Ausdrücke unabhängig bewerten? Zum Beispiel:
var result = new List<bool>
{
false,
foo(),
bar()
}.Aggregate(true, (acc, x) => acc && x);
Der Begriff ist "Kurzschlussauswertung" – Erix
'Aggregate()' iteriert über das gesamte Aufzählungszeichen. –
Nein, die Akkumulationsfunktion ist für Aggregat undurchsichtig, sodass sie die gesamte Sequenz konsumieren muss. – Lee