Initialisierung der Variablen C #: Warum verursacht dieser Code KEIN Compilerfehler oder Laufzeitfehler?

8
%Vor%


Gibt es etwas, das ich nicht verstehe über die Switch-Anweisung in C #? Warum sollte dies kein Fehler sein, wenn Fall 2 verwendet wird?
Edit: Dieser Code funktioniert und wirft keinen Fehler.

    
Jeremy Cron 14.05.2009, 15:51
quelle

6 Antworten

16

Sie müssen vorsichtig sein, wie Sie über die switch Aussage hier denken. Es gibt überhaupt keine Erstellung von variablen Bereichen . Lassen Sie nicht die Tatsache, dass nur, weil der Code in Fällen eingerückt wird, dass es in einem untergeordneten Bereich residiert.

Wenn ein switch-Block kompiliert wird, werden die case -Schriftzüge einfach in labels konvertiert, und der entsprechende goto -Befehl wird am Anfang der switch-Anweisung in Abhängigkeit vom Umschalt-Ausdruck ausgeführt. Tatsächlich können Sie goto -Anweisungen manuell verwenden, um "Fall-Through" -Situationen zu erstellen (die C # direkt unterstützt), wie z. VS.71) .aspx "> schlägt die MSDN-Seite vor.

%Vor%

Wenn Sie speziell Bereiche für jeden Fall im Block switch erstellen möchten, können Sie Folgendes tun:

%Vor%

Dies erfordert , dass Sie die Variable x neu deklarieren (sonst erhalten Sie einen Compilerfehler). Die Methode, jedes (oder zumindest einige) zu definieren, kann in bestimmten Situationen sehr nützlich sein, und Sie werden es sicherlich von Zeit zu Zeit im Code sehen.

    
Noldorin 14.05.2009, 15:55
quelle
8

Die Dokumentation zu MSDN lautet:

  

Der Bereich einer lokalen Variable, die in einem switch-Block einer switch-Anweisung deklariert ist (Abschnitt 8.7.2), ist der switch-block.

Auch eine ähnliche Frage wurde schon früher gestellt: Variablendeklaration in der c # switch-Anweisung

    
Lars A. Brekken 14.05.2009 15:55
quelle
4

Es gibt keinen Compilerfehler, da die switch-Anweisung keinen neuen Bereich für Variablen erstellt.

Wenn Sie eine Variable innerhalb eines Switches deklarieren, hat die Variable denselben Gültigkeitsbereich wie der Codeblock, der den Switch umgibt. Um dieses Verhalten zu ändern, müssten Sie {}:

hinzufügen %Vor%

Dies wird den Compiler beschweren. Der Switch selbst führt dies intern jedoch nicht durch, daher gibt es keinen Fehler in Ihrem Code.

    
Reed Copsey 14.05.2009 15:56
quelle
1

Es sieht so aus, als ob das Scoping von Variablen innerhalb des Schalters liegt, nicht der Fall, wahrscheinlich weil Fälle gestapelt werden können. Beachten Sie, wenn Sie versuchen, X außerhalb des Schalters zu referenzieren, wird es fehlschlagen.

    
RedFilter 14.05.2009 15:59
quelle
0

Wenn Sie innerhalb des Falls eine lokale Variable erstellen, können Sie sie nicht außerhalb der Groß- und Kleinschreibung verwenden.

%Vor%     
Syed Tayyab Ali 14.05.2009 15:56
quelle
-2

Verschieben Sie die Zeichenfolgedeklaration vor

%Vor%

Aussage. Weisen Sie dann für jeden Fall x zu.

    
Pat 14.05.2009 15:52
quelle

Tags und Links