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>
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!