Heim >Backend-Entwicklung >C++ >Verursacht C#'s' foreach 'Loop Variable Wiederverwendung ein unerwartetes Verhalten bei Lambdas?
Wiederverwendung von Zyklusvariablen: Ein Problem, das aus der Geschichte übrig bleibt foreach
Bei Verwendung des Lambda -Ausdrucks oder einer anonymen Methode kann die Wiederverwendung von C#
foreach
Die Entstehung dieses speziellen Verhaltens liegt daran
Obwohl einige Leute behaupten, dass die Variablen außerhalb des Zyklus deklarieren werden, bringen es keine Leistungsvorteile mit sich, aber es ist möglicherweise nur nützlich, nach Ablauf des Zyklus darauf zuzugreifen. Diese Methode kann jedoch aufgrund des Schließungsproblems schwerwiegende Fehler verursachen.
<code class="language-c#">string s; while (enumerator.MoveNext()) { s = enumerator.Current; ... }</code>Im Gegensatz zum Zyklus befindet sich der variable Umfang der für die Schleife im Zyklus. Diese Inkonsistenz erhöht unnötige Fehlerrisiken und erschwert das Debuggen.
Obwohl diese Entwurfswahl vor der Einführung des Lambda -Ausdrucks und der anonymen Methoden getroffen werden kann, wurde sie nicht geändert und es wird weiterhin Probleme für Entwickler bringen.
foreach
Hauptänderungen in C# 5
erkannte diesen Entwurfsfehler an, C# 5 führte eine größere Änderung vor, um ihn zu lösen.
kreisförmige Variablen wirken jetzt logisch im Zykluskörper. Dies bedeutet, dass der Verschluss die neue Kopie der Variablen bei jeder Iteration erfasst und so das geänderte Verschlussproblem beseitigt. Die für die Schleife bleibt jedoch unverändert und die Änderung wird nicht auf die frühe C#-Version zurückgeführt. Daher sollten Entwickler weiterhin sorgfältig arbeiten, wenn der
-Zyklus mit Lambda -Ausdruck oder anonymer Methode verwendet wird.Das obige ist der detaillierte Inhalt vonVerursacht C#'s' foreach 'Loop Variable Wiederverwendung ein unerwartetes Verhalten bei Lambdas?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!