Heim > Backend-Entwicklung > C++ > Warum sind erfasste Abschlüsse in C# 5.0 für For-Schleifen problematisch, nicht jedoch für Foreach-Schleifen?

Warum sind erfasste Abschlüsse in C# 5.0 für For-Schleifen problematisch, nicht jedoch für Foreach-Schleifen?

Mary-Kate Olsen
Freigeben: 2025-01-07 19:31:41
Original
570 Leute haben es durchsucht

Why are Captured Closures Problematic in C# 5.0 For Loops but Not Foreach Loops?

Abschlüsse in C# 5.0-Schleifen erfassen: Der Unterschied zwischen For-Schleifen und Foreach-Schleifen

Frage:

In C# 5.0 werden Abschlüsse in foreach-Schleifen korrekt erfasst, aber warum gibt es immer noch Probleme beim Erfassen von Abschlüssen in for-Schleifen?

Antwort:

Logisch gesehen ist das Verhalten von Abschlüssen in for-Schleifen vernünftig. Nachdem die for-Schleife in ihre Bestandteile (Initialisierer, Bedingung, Iterator und Rumpf) zerlegt wurde, wird der Initialisierer nur einmal ausgeführt. Daher ist es logisch, dass es nur eine „Variableninstanziierung“ gibt.

Außerdem ist in einer for-Schleife der Anfangswert der Variablen für jede Iteration nicht vorbestimmt. 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>
Nach dem Login kopieren

In dieser Schleife kann sich der Wert von j während der Schleife ändern. Welches Verhalten ist in diesem Fall zu erwarten?

Im Gegensatz dazu scheint die foreach-Schleife für jede Iteration eine neue Variable zu deklarieren, und diese Variable ist schreibgeschützt. Daher ist es sinnvoll, sich eine foreach-Schleife so vorzustellen, dass sie bei jeder Iteration eine separate schreibgeschützte Variable deklariert, deren Wert vom Iterator übernommen wird. Dies erklärt, warum Abschlüsse in foreach-Schleifen korrekt erfasst werden.

Das obige ist der detaillierte Inhalt vonWarum sind erfasste Abschlüsse in C# 5.0 für For-Schleifen problematisch, nicht jedoch für Foreach-Schleifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage