Heim >Backend-Entwicklung >C++ >Warum gilt der Captured-Closure-Fix von C# 5.0 nicht für For-Schleifen?
Abschlusserfassung (Schleifenvariablen) in C# 5.0
Frage:
In C# 5.0 wurden Probleme beim Erfassen von Abschlüssen in foreach-Schleifen behoben, um sicherzustellen, dass die korrekten Werte von Schleifenvariablen erfasst werden. Das gleiche Problem besteht jedoch immer noch in der for-Schleife. Warum ist dieses Problem nicht für beide Schleifentypen gelöst?
Antwort:
Das vorhandene Verhalten in der for-Schleife ist logisch sinnvoll. Obwohl eine foreach-Schleife dem Deklarieren einer neuen Variablen für jede Iteration ähnelt, hat eine for-Schleife eine einzigartige Struktur, einschließlich eines Initialisierers, Bedingungen, Iteratoren und eines Rumpfes.
Der Initialisierer in der for-Schleife wird nur einmal ausgeführt, daher ist es logisch, die „Variableninstanziierung“ nur einmal durchzuführen. Darüber hinaus gibt es keine inhärente Annahme über den „Anfangs“wert der Variablen für jede Schleifeniteration.
Betrachten Sie das folgende Beispiel:
<code class="language-C#">for (int i = 0, j = 10; i < 5; i++, j--) { Action action = () => Console.WriteLine(i, j); action(); }</code>
Wenn Sie dieses Problem in diesem Fall für eine for-Schleife lösen, ist es schwierig, deren Verhalten zu bestimmen.
Das obige ist der detaillierte Inhalt vonWarum gilt der Captured-Closure-Fix von C# 5.0 nicht für For-Schleifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!