Heim >Backend-Entwicklung >C++ >Warum hat C# 5.0 das erfasste Abschlussverhalten für „for'-Schleifen nicht wie bei „foreach'-Schleifen korrigiert?
Inkonsistente Abschlusserfassung von C# 5.0: for
vs. foreach
Das Problem
C# 5.0 verbesserte die Abschlusserfassung in foreach
-Schleifen, jedoch nicht in for
-Schleifen. foreach
Schleifen erfassen jetzt den Wert der Schleifenvariablen für jede Iteration korrekt. for
Schleifen behalten jedoch das ältere Verhalten bei und erfassen nur den Endwert der Schleifenvariablen.
Die Frage:Warum diese Diskrepanz?
Die Erklärung:
Der Unterschied ergibt sich aus der grundlegenden Struktur der for
- und foreach
-Schleifen. Eine foreach
-Schleife durchläuft grundsätzlich eine Sammlung und erstellt für jedes Element eine neue Instanz der Schleifenvariablen. Dies macht eine konsistente Erfassung pro Iteration einfach.
Eine for
-Schleife ist dagegen komplexer. Es besteht aus einem Initialisierer, einer Bedingung, einem Iterator und einem Körper. Der Initialisierer wird nur einmal ausgeführt und erstellt eine einzelne Schleifenvariable. Der Wert der Schleifenvariablen ist nicht unbedingt an jede Iteration gebunden; Es kann unabhängig innerhalb des Schleifenkörpers manipuliert werden.
Bedenken Sie:
<code class="language-csharp">for (int i = 0, j = 10; i < 5; i++, j--) { Console.WriteLine(i, j); }</code>
Wenn die Schleifenvariable i
bei jeder Iteration erfasst würde, wäre das Verhalten aufgrund der unabhängigen Änderung von j
unvorhersehbar und möglicherweise mehrdeutig. Das konsistente Verhalten bei der Erfassung des endgültigen Werts von i
sorgt für ein klares und vorhersehbares Ergebnis. Dadurch werden unerwartete Komplexitäten und potenzielle Fehler vermieden. Daher spiegelt die unterschiedliche Handhabung in C# 5.0, obwohl sie scheinbar inkonsistent ist, die inhärenten strukturellen Unterschiede zwischen den Schleifentypen wider und zielt auf ein klares, vorhersehbares Verhalten in jedem Fall ab.
Das obige ist der detaillierte Inhalt vonWarum hat C# 5.0 das erfasste Abschlussverhalten für „for'-Schleifen nicht wie bei „foreach'-Schleifen korrigiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!