c#
Wiederverwendung von Zyklusvariablen: eine unnötige Falle foreach
Bei Verwendung des Lambda -Ausdrucks oder einer anonymen Methode in C#kann ein modifizierter Verschlusszugriff angezeigt werden.
foreach
Der Compiler deklariert normalerweise die Zyklusvariable außerhalb des Zykluskörpers, wie im modifizierten Verschlussbeispiel gezeigt:
Dies unterscheidet sich von den Erwartungen an deklarierte Variablen im Zyklus:
string s; while (enumerator.MoveNext()) { s = enumerator.Current; ... }
Die externe variable Anweisung hat das Problem der modifizierten Verschlusszugriffsprobleme verschärft, da sie einen längeren Bereich für Variablen erzeugt. Die im Zyklus <环> deklarierten Variablen können nicht außerhalb des Zyklus zugegriffen werden.
while (enumerator.MoveNext()) { string s; s = enumerator.Current; ... }
Der Compiler beschließt, die kreisförmige Variable vor der Einführung des Lambda -Ausdrucks und der anonymen Methode wiederzuverwenden. Daher gab es keine mögliche Falle, dass die variable Wiederverwendung zu diesem Zeitpunkt vollständig berücksichtigt wurde. foreach
Obwohl diese Reparatur eine beliebte Verbesserung ist, muss sie bei der Verwendung der alten Version der alten Version diese Reparatur nicht unterstützt, aber sie muss noch auf dieses Problem achten.
Das obige ist der detaillierte Inhalt vonWarum verursacht C#'forach` Loop Variable Wiederverwendung Probleme mit Schließungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!