Du liest:
C# Switch Case (mit Codebeispielen)

C# Switch Case (mit Codebeispielen)

von Patrick
28.05.2020
Die C# Switch Anweisung

Im Regelfall ist die Ausführung von Quellcode von bestimmten Variablen abhängig. Es gibt verschiedene Wege um die Werte von Variablen zu überprüfen. Neben if und else stellt uns C# dafür noch switch und case zur Verfügung, die ich dir Heute in diesem Artikel vorstellen möchte.

1. Einfacher C# switch-case-Block

1.1. einfache Anwendung

Am Einfachsten lässt sich so ein Block erstellen, indem du an switch eine Variable übergibst und mit case festlegst, welcher Code bei welchem Wert der Variablen ausgeführt werden soll.

int i = 0;
switch(i) {
    case 0:
        Console.WriteLine("i ist 0");
        break;
}
// i ist 0

Du kannst case natürlich auch mehrmals im selben switch verwenden. Zu beachten hierbei ist lediglich, dass jeder case mit einem break, return oder goto beendet werden muss. break beendet nur die Ausführung des Codeblocks, mit return kannst du einen Wert zurückgeben und goto lässt dich zu einem anderen case springen. Zu goto kannst du im dritten Abschnitt des Artikels mehr lesen.

int i = 1;
switch(i) {
    case 0:
        Console.WriteLine("i ist 0");
        break;
    case 1:
        Console.WriteLine("i ist 1");
        break;
}
// i ist 1

Wenn du nach einem case noch einen case angibst ohne dazwischen Code anzugeben, wird für beide Fälle der selbe Code ausgeführt.

int i = 0;
switch (i) {
    case 0:
    case 1:
        Console.WriteLine("i ist 0 oder 1");
        break;
}
// i ist 0 oder 1

1.2. Standardanweisungen mit default realisieren

Mit default kannst du festlegen, was passieren soll, wenn keine der Bedingungen in case zutrifft.

int i = 2;
switch(i) {
    case 0:
    case 1:
        Console.WriteLine("i ist 0 oder 1");
        break;
    default:
        Console.WriteLine("i ist weder 0 noch 1");
        break;
}
// i ist weder 0 noch 1

1.3. zusätzliche Bedingungen mit when

when lässt dich unter Anderem eine zusätzliche Bedingung festlegen. Im folgenden Beispiel ist case 1 doppelt vertreten, jedoch mit unterschiedlicher when Bedingung.

int wert = 1;
int zweiter_wert= 2;
switch (wert) {
    case 1 when zweiter_wert == 1:
        Console.WriteLine("Eins");
        break;
    case 1 when zweiter_wert == 2:
        Console.WriteLine("Eins und Zwei");
        break;
    case 2:
        Console.WriteLine("Zwei");
}
// Eins und Zwei

Du kannst mit when Bedingungen in case freier formulieren. Hier wird ein numerischer Wert darauf überprüft, ob er über 50, unter 25 oder zwischen den beiden liegt.

int i = 42;
switch (i) {
    case int n when (n >= 50):
        Console.WriteLine($"n ist 50 oder höher: {n}");
        break;
    case int n when (n < 50 && n >= 25):
         Console.WriteLine($"n ist zwischen 50 und 25: {n}");
         break;
    case int n when (n < 25):
        Console.WriteLine($"n ist weniger als 25: {n}");
        break;
}
// n ist zwischen 50 und 25: 42

2. Die Nutzung von switch in Kombination mit Enumeration / Enum

Um zu demonstrieren, wie man switch mit enum verwenden kann, benutzen wir das folgende enum für das darauffolgende Beispiel.

public enum Ort {
    Berlin,
    München,
    Leipzig
}
Ort ort = Ort.Leipzig;
switch (ort) {
    case Ort.Berlin:
        Console.WriteLine("Ort: Berlin");
        break;
    case Ort.München:
        Console.WriteLine("Ort: München");
        break;
    case Ort.Leipzig:
        Console.WriteLine("Ort: Leipzig");
        break;
    default:
        Console.WriteLine("Unbekannt");
        break;
}
// Ort: Leipzig

Da enums ebenfalls numerische Werte haben, ist dies recht einfach. Wenn du mehr darüber erfahren möchtest, kannst du gerne unseren Artikel Alles über das C# Enum dazu lesen.

3. Das goto im C# switch-case

Mit goto kannst du einen bestimmten case oder den default Block angeben und ausführen lassen.

int code = 404;
switch (code) {
    case 404:
        Console.WriteLine("404 - nicht gefunden");
        goto default;
    default:
        Console.WriteLine("unbekannt");
        break;
}
// 404 - nicht gefunden
// unbekannt

Allerdings kann die Verwendung von goto schnell zu unübersichtlichem Code führen und ist daher mit Vorsicht zu verwenden, wenn überhaupt. Das folgende Beispiel erzeugt eine Endlosschleife mit goto. Bitte nicht nachmachen.

switch (code) {
    case 200:
        Console.WriteLine("200 - Hi");
        goto case 404;
    case 404:
        Console.WriteLine("404 – nicht gefunden");
        goto case 200;
}
404 - nicht gefunden
200 - Hi
404 - nicht gefunden
200 - Hi
404 - nicht gefunden
200 - Hi
...

4. Fazit – Das C# switch-case

switch und case sind praktisch, um für verschiedene Fälle entscheiden zu können, was für Code ausgeführt werden soll. Allerdings können solche Blöcke auch schnell groß und unübersichtlich werden und in einer Endlosschleife enden.

Hast du noch Fragen? Auch Lob und Verbesserungsvorschläge sind in den Kommentaren gerne gesehen!

Das könnte dich auch interessieren