Heim >Backend-Entwicklung >C++ >Warum gilt der Captured-Closure-Fix von C# 5.0 nicht für For-Schleifen?

Warum gilt der Captured-Closure-Fix von C# 5.0 nicht für For-Schleifen?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-07 19:16:43371Durchsuche

Why Doesn't C# 5.0's Captured Closure Fix Apply to For Loops?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn