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.
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.
Wenn Sie speziell Bereiche für jeden Fall im Block switch
erstellen möchten, können Sie Folgendes tun:
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.
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
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.
Wenn Sie innerhalb des Falls eine lokale Variable erstellen, können Sie sie nicht außerhalb der Groß- und Kleinschreibung verwenden.
%Vor%Tags und Links c# switch-statement