Heim >Backend-Entwicklung >C++ >Warum wurden die in C# 5.0 erfassten Abschlussverbesserungen nicht auf „for'-Schleifen angewendet?
C# 5.0: Warum for
Schleifen die erfasste Abschlussverbesserung verpasst haben
C# 5.0 hat das Problem mit erfassten Schleifenvariablen in foreach
Schleifen behoben und sichergestellt, dass Abschlussvariablen den Wert der Schleifenvariablen zum Zeitpunkt der Erfassung genau widerspiegeln. Diese Verbesserung wurde jedoch nicht auf for
-Schleifen angewendet, die ihr Verhalten vor 5.0 beibehalten.
Der Grund für die Unterlassung
Dieser absichtliche Ausschluss ergibt sich aus grundlegenden Unterschieden zwischen for
und foreach
Schleifen:
for
Schleifen: Initialisierungszentriert. Eine for
Schleife beginnt mit einem Initialisierer, der der Schleifenvariablen einen Wert zuweist. Diese Variable ist von zentraler Bedeutung für die Logik der Schleife und wird wiederholt geändert und überprüft.foreach
Schleifen: Iteratorbasiert. foreach
Schleifen basieren auf einem Iterator, der Werte für jede Iteration bereitstellt. Die Schleifenvariable fungiert als Platzhalter und greift auf den Wert des Iterators zu.In for
-Schleifen entspricht das Konzept einer einzelnen „Instanziierung von Schleifenvariablen“ ihrer initialisierungsorientierten Natur. Es gibt eine einzige, logisch konsistente Schleifenvariableninstanz, die initialisiert, aktualisiert wird und den Schleifenabschluss steuert.
Bedenken Sie diese for
Schleife:
<code class="language-csharp">for (int i = 0; i < 10; i++) { ... }</code>
Hier verwaltet i
die Anzahl der Iterationen. Es wird auf 0 initialisiert, bei jeder Iteration erhöht und steuert die Beendigung der Schleife. Ein Abschluss, der i
erfasst, würde intuitiv auf einen einzelnen Wert verweisen, unabhängig von den In-Loop-Änderungen von i
. Dies widerspricht der Abhängigkeit der for
-Schleife vom sich ändernden Zustand der Variablen.
Umgekehrt sind foreach
Schleifen nicht vom Zustand der Schleifenvariablen abhängig. Sie durchlaufen eine Sammlung, ohne dass eine bestimmte Variableninstanz erforderlich ist. Somit erfasst der Abschluss den Wert des Iterators zum Erfassungszeitpunkt, isoliert von nachfolgenden Änderungen.
Das obige ist der detaillierte Inhalt vonWarum wurden die in C# 5.0 erfassten Abschlussverbesserungen nicht auf „for'-Schleifen angewendet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!