C#-Variablenbereich: Warum verwechselt der Compiler „x“?
Der folgende C#-Codeausschnitt:
<code class="language-csharp">if (true) { string var = "VAR"; } string var = "New VAR!";</code>
Das zweite Deklarieren der Variablen „var“ in einem äußeren Bereich löst den folgenden Fehler aus:
Fehler 1: Eine lokale Variable mit dem Namen „var“ kann in diesem Bereich nicht deklariert werden, da sie eine andere Bedeutung hätte als „var“, die bereits zur Darstellung von etwas anderem im „untergeordneten“ Bereich verwendet wird.
Dieser Fehler tritt auf, weil C# strenge Bereichsregeln erzwingt, die verhindern, dass Variablen mit demselben Namen in überlappenden Bereichen neu deklariert werden. Obwohl die erste „var“-Deklaration auf den inneren Bereich beschränkt ist und keine Auswirkung auf den äußeren Bereich zu haben scheint, behandelt der Compiler beide Instanzen so, als befänden sie sich im selben Bereich.
Das Problem ergibt sich aus den Einschränkungen des Compiler-Designs. Es analysiert Variablen ausschließlich auf der Grundlage ihres Umfangs, unabhängig von der Reihenfolge, in der sie deklariert oder verwendet werden. Also der folgende theoretisch gültige Code:
<code class="language-csharp">string var = "New VAR!"; if (true) { string var = "VAR"; }</code>
Der Compiler betrachtet es auch als ungültig.
Um diese Mehrdeutigkeit zu beseitigen, wird empfohlen, unterschiedliche Variablennamen oder Geschwisterbereiche zu verwenden:
<code class="language-csharp">string varOuter = "New VAR!"; if (true) { string varInner = "VAR"; }</code>
Obwohl Geschwisterbereiche technisch gültig sind, können sie verwirrend sein und werden im Allgemeinen nicht empfohlen. Alternativ ist es besser, Variablen umzubenennen, um Variablen aus unterschiedlichen Bereichen unterscheiden zu können.
Das obige ist der detaillierte Inhalt vonWarum beschwert sich C# über die Neudeklaration einer Variablen in verschiedenen Bereichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!