Heute werden wir die C# switch Anweisungen oder anders gesagt, die sogenannten switch Blöcke näher kennenlernen. Im vergangenen Beitrag haben wir bereits gesehen, wie man mithilfe von if Abfragen seinen Programmablauf steuern kann. Bei den C# switch Blöcken handelt es sich um ein sehr ähnliches Konzept und damit auch in einigen Fällen um eine ziemlich gute Alternative zu den if Abfragen.
Inhaltsverzeichnis
1. Was sind C# switch Blöcke?
Bevor wir in das Thema eintauchen, sollten wir zunächst einmal die Frage beantworten, was denn switch Blöcke eigentlich sind.
Ähnlich wie mit if Abfragen können wir mit switch Blöcken den Programmablauf steuern. Anders jedoch als bei den if Abfragen, prüft das Programm dabei nicht auf eine Bedingung, sondern stattdessen eine Variable auf mehrere Konstanten.
Eine Konstante ist im Grunde ähnlich wie eine Variable mit dem Unterschied, dass ihr Wert unveränderbar ist. Eine Konstante ist also ein ganz bestimmter Wert. Mit einem switch Block können wir bei einer Variable überprüfen, ob diese denselben Wert hat wie mehrere festgelegte Konstanten innerhalb dieses switch Blocks.
Wie das genau aussieht, möchte ich dir an diesem einfachen Beispiel veranschaulichen:
Ganz oben auf der Abbildung haben wir eine Integer Variable namens „wochentag“, die ich auf den Wert 3 gesetzt habe. Anschließend leite ich mit dem switch-Schlüsselwort den C# switch Block ein und übergebe innerhalb eines Klammerpaars die Variable, die wir auf Konstanten überprüfen möchten. Dabei handelt es sich um die Variable wochentag, die ich bereits oben initialisiert habe. In den Kopf des switch Blocks gehört also die zu überprüfende Variable.
Anschließend folgt der Codeblock, in dem mehrere „cases“ definiert sind. Ein case, zu Deutsch ein Fall, ist im Grunde eine Konstante, auf die wir überprüfen.
Sehen wir uns als Beispiel einmal die Definition von case 1 an. Dieser wird eingeleitet mit dem Schlüsselwort case, gefolgt von der Konstante, also dem Wert, den dieser case haben soll und einem Doppelpunkt.
Alles, was nach dem Doppelpunkt folgt, führt das Programm dann aus, wenn die Variable wochentag den Wert 1 hat.
Das heißt: Wenn wir den switch Block einleiten, guckt das Programm erst, welche Variable auf verschiedene Konstanten geprüft werden soll. Im Fall unseres Beispiels ist das die Variable wochentag. Anschließend springt das Programm in den Block und überprüft die verschiedenen cases, bis es bei dem case ankommt, der für die Variable wochentag zutrifft.
Es prüft also zuerst bei case 1, ob wochentag den Wert 1 hat. Da wochentag jedoch den Wert 3 besitzt, steuert das Programm direkt zum nächsten case. Hier überprüft es, ob wochentag den Wert 2 hat. Da dies auch nicht der Fall ist, geht es weiter zu case 3, um zu überprüfen, ob wochentag diesen Wert besitzt. Da wochentag tatsächlich den Wert 3 hat, führt das Programm nun den Code dieses cases, den Console.WriteLine-Befehl, aus.
In der Konsole wird also „Mittwoch“ ausgegeben.
1.1. Das Schlüsselwort break
Dann gelangen wir zu einem break. Wie du sehen kannst, befindet sich ein break in jedem der cases. Wir nutzen es, um den case zu vollenden und den switch Block direkt zu verlassen, wenn das Programm den entsprechenden case ausgeführt hat.
Mit dem break können wir also wieder aus dem C# switch Block herausspringen.
Der Hintergrund hierfür ist, dass wir nach der Ausführung des zutreffenden cases nicht noch die danach folgenden cases sowie den default case ausführen lassen möchten.
1.2. Der default case
Den default case führt das Programm dann aus, sollte keiner der fest definierten cases zutreffen. Das heißt, wenn wochentag nicht den Wert 1, 2, 3, 4 oder 5 besitzt, führt es den default case aus. Im Beispiel lassen wir hierzu „ungültiger Wochentag“ in der Konsole ausgeben.
2. C# switch Blöcke in der Praxis
Um das Thema noch besser verstehen zu können, sehen wir uns die C# switch Blöcke nun mal in der Praxis anhand eines Beispiels an.
Hierfür erstellen wir eine Integer Variable mit dem Namen monat und setzen diese auf den Wert 3. Wir möchten nun einen switch Block bauen, der monat auf verschiedene Konstanten überprüft. Für die Konstanten wählen wir die Zahlen von 1 bis 12. Im Beispiel werde ich nicht alle Konstanten ausschreiben, da das den Rahmen dieses Beitrags sprengen würde. Die verbleibenden Konstanten kannst du in deinem Programm aber gerne als Übung selbst ergänzen.
Für jede Zahl, die wir haben, soll das Programm dann den entsprechenden Monat in Textform auf der Konsole ausgeben.
Für den Fall, dass monat den Wert 1 hat, legen wir in case 1 fest, dass das Programm „Januar“ auf der Konsole ausgeben werden soll. Um den case abzuschließen, setzen wir noch ein break.
Für den case 2 legen wir die Ausgabe „Februar“ fest und setzen auch hier ein break:
Für case 3, der auch der letzte dieses Beispiels sein wird, lassen wir in der Konsole „März“ ausgeben und setzen ebenfalls am Ende ein break:
Zu guter Letzt definieren wir noch den default case, der dann ausgeführt wird, wenn keiner der oben definierten cases zutrifft. Für diesen default case lassen wir auf der Konsole ausgeben „Ungültiger Monat“ und schreiben auch danach das Schlüsselwort break:
An dieser Stelle starten wir das Programm einmal, um zu sehen, was passiert. In der Variable monat befindet sich der Wert 3:
Wie wir sehen, gibt das Programm März in der Konsole aus. Das ist schließlich der dritte Monat und entspricht dem case 3.
Weisen wir der Variable monat den Wert 1 zu, gibt uns das Programm „Januar“ auf der Konsole aus:
Wenn wir etwas völlig anderes eingeben wie etwa 1234, gibt uns das Programm den default case und somit „Ungültiger Monat“ aus:
So viel zum Thema switch case in C#!
Die Switch-Blöcke verwenden wir vor allem dann, wenn wir eine bestimmte Variable auf mehrere verschiedene konstante Werte überprüfen möchten. Anstelle eines großen verschachtelten if-Statements mit zahlreichen Alternativblöcken können wir also die C# switch Blöcke nutzen, die unseren Code wesentlich schöner und übersichtlicher gestalten.