Heim >Backend-Entwicklung >C++ >Warum meldet C# Variablenbereichsfehler in verschachtelten Schleifen und wie wirken sich „unsichtbare Klammern' darauf aus?
In diesem Artikel wird die Komplexität des Variablenbereichs in C# eingehend untersucht und zwei Codebeispiele analysiert, um die Fragen zu erläutern, die das Verhalten des Variablenbereichs aufwirft.
<code class="language-c#">public void MyMethod() { int i = 10; for (int x = 10; x < 20; x++) { int i = x; // Point1: 变量i在此处重新声明 object objX = new object(); // Point2: 变量objX在此处重新声明 } object objX = new object(); }</code>
Wie erwartet wird an Punkt1 ein Fehler aufgrund der Neudeklaration der Variablen i innerhalb der for-Schleife gemeldet. Dieser Fehler ist auf eine Grundregel zurückzuführen, die die Verwendung von Variablen mit demselben Namen im selben Deklarationsraum für lokale Variablen oder in verschachtelten Deklarationsräumen für lokale Variablen nicht zulässt.
Der Fehler bei Punkt2 kann jedoch verwirrend sein. Die objX-Variable wird außerhalb der for-Schleife deklariert, der Compiler meldet jedoch weiterhin den Fehler. Hier kommt das Konzept der „impliziten Klammern“ ins Spiel.
In C# wird jede for-Schleife als in implizite geschweifte Klammern eingeschlossen betrachtet. Daher wird davon ausgegangen, dass eine außerhalb einer for-Schleife deklarierte objX-Variable im Gültigkeitsbereich des for-Schleifenkörpers liegt. Da innerhalb der for-Schleife eine weitere objX-Variable deklariert wird, verstößt dies gegen die Regel, die die Wiederverwendung von Variablennamen innerhalb desselben Bereichs verhindert.
<code class="language-c#">public void MyMethod() { for (int i = 10; i < 20; i++) { // ... } for (int i = 10; i < 20; i++) { // ... } for (int objX = 10; objX < 20; objX++) { // ... } for (int objX = 10; objX < 20; objX++) { // ... } }</code>
In Codebeispiel 2 gibt es keine Compilerfehler mehr. Dies liegt daran, dass jede for-Schleife über einen eigenen Satz impliziter geschweifter Klammern verfügt, wodurch unterschiedliche Bereiche für die i- und objX-Variablen innerhalb jeder Schleife erstellt werden. Daher werden Variablen mit demselben Namen nur im isolierten Bereich ihrer jeweiligen for-Schleifen verwendet und unterliegen den Regeln für den Variablenbereich.
Das obige ist der detaillierte Inhalt vonWarum meldet C# Variablenbereichsfehler in verschachtelten Schleifen und wie wirken sich „unsichtbare Klammern' darauf aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!