switch-Ausdrücke
Kompakte switch-Ausdrücke mit Rückgabewert.
switch-Ausdrücke ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist ein switch-Ausdruck?
Ein switch-Ausdruck wertet eine Eingabe anhand einer Reihe von Mustern aus und gibt einen Wert zurück. Anders als die klassische switch-Anweisung ist er ein Ausdruck und erzeugt daher ein Ergebnis, das Sie zuweisen oder zurückgeben können.
Dazu steht das Schlüsselwort switch hinter dem Wert; die Arme werden als pattern => result geschrieben. Dadurch bleibt die Verzweigungslogik kompakt und funktional.
int code = 2;
string name = code switch
{
1 => "One",
2 => "Two",
_ => "Other"
};
System.Console.WriteLine(name);Anweisung vs. Ausdruck
Die alte switch-Anweisung verwendet case-Markierungen und break. Der neuere switch-Ausdruck kommt vollständig ohne diese Schlüsselwörter aus.
Die Arme werden durch Kommas getrennt, der gesamte Ausdruck endet mit einem Semikolon und jeder Arm liefert einen Wert, anstatt Blöcke mit Fall-through auszuführen. Dadurch wird eine ganze Klasse von Fehlern durch vergessene break-Anweisungen vermieden.
// Statement style
switch (code) { case 1: result = "One"; break; }
// Expression style
result = code switch { 1 => "One", _ => "?" };Der Discard-Arm
Der Unterstrich _ ist das Discard-Muster. Es passt auf alles und fungiert als Standardfall.
Switch-Ausdrücke müssen vollständig sein: Wenn zur Laufzeit kein Arm passt, wird eine SwitchExpressionException ausgelöst. Ein _-Arm garantiert eine Übereinstimmung für jede mögliche Eingabe.
using System;
class Program {
static void Main() {
int n = 7;
string size = n switch {
< 5 => "small",
_ => "big"
};
Console.WriteLine(size);
}
}Konstantenmuster
Der einfachste Arm verwendet ein Konstantenmuster: einen Literalwert, mit dem die Eingabe auf Gleichheit verglichen wird.
Konstanten können Zahlen, Zeichenfolgen, Zeichen, Enum-Member oder benannte Konstanten sein. Sie werden von oben nach unten ausgewertet. Ordnen Sie daher die spezifischsten oder häufigsten Arme zuerst an.
char grade = 'B';
string label = grade switch
{
'A' => "Excellent",
'B' => "Good",
'C' => "Fair",
_ => "Needs work"
};
System.Console.WriteLine(label);Rückgabe aus einer Methode
Switch-Ausdrücke spielen ihre Stärken in Methoden aus. Da das gesamte Konstrukt ein Ausdruck ist, können Sie es direkt mit return zurückgeben, häufig als einzeilige, ausdruckskörperige Methode.
Dadurch bleibt die Zuordnungslogik lesbar und zentral gebündelt, anstatt über mehrere if/else if-Ketten im Methodenrumpf verteilt zu sein.
using System;
class Program {
static string Day(int d) => d switch {
0 => "Sun", 6 => "Sat", _ => "Weekday"
};
static void Main() => Console.WriteLine(Day(6));
}Switch-Ausdrücke mit Enums
Enums eignen sich besonders gut für Switch-Ausdrücke. Jeder Arm benennt ein Enum-Mitglied, und der Compiler kann vor einem fehlenden Fall warnen, wenn Sie den Discard-Arm weglassen.
Trotzdem ist es sinnvoll, einen _-Arm beizubehalten, damit zukünftige Enum-Werte nicht zur Laufzeit zum Absturz Ihrer App führen.
using System;
enum Light { Red, Yellow, Green }
class Program {
static void Main() {
Light l = Light.Green;
string action = l switch {
Light.Red => "Stop",
Light.Yellow => "Slow",
Light.Green => "Go",
_ => "?"
};
Console.WriteLine(action);
}
}Wächterklauseln mit when
Eine when-Wächterbedingung fügt einem Arm eine boolesche Bedingung hinzu. Der Arm passt nur, wenn sowohl das Muster als auch die Wächterbedingung wahr sind.
So können Sie Übereinstimmungen mit beliebiger Logik verfeinern, die ein Muster allein nicht ausdrücken kann, etwa Bereichsprüfungen in Kombination mit anderen Variablen.
int temp = 30;
string weather = temp switch
{
int t when t < 0 => "Freezing",
int t when t < 20 => "Cool",
_ => "Warm"
};
System.Console.WriteLine(weather);Die Reihenfolge ist entscheidend
Die Arme werden in der Reihenfolge ihres Quellcodes geprüft. Der erste passende Arm gewinnt. Spezifischere Muster müssen daher vor allgemeineren stehen.
Wenn ein allgemeiner Arm vor einem spezifischen steht, meldet der Compiler den späteren Arm als nicht erreichbar. Lesen Sie Ihre Arme von oben nach unten wie einen Trichter – von eng nach weit.
int score = 95;
string tier = score switch
{
>= 90 => "Gold",
>= 70 => "Silver",
_ => "Bronze"
};
System.Console.WriteLine(tier);Vollständigkeit und Ausnahmen
Wenn nicht jede Eingabe abgedeckt ist und kein Arm passt, löst die Laufzeit System.Runtime.CompilerServices.SwitchExpressionException aus.
Der Compiler gibt die Warnung CS8509 aus, wenn er die Vollständigkeit nicht nachweisen kann. Nehmen Sie diese Warnung ernst: Fügen Sie einen Discard-Arm hinzu oder decken Sie die fehlenden Werte ab, damit der Ausdruck für jede Eingabe einen Wert liefert.
using System;
class Program {
static void Main() {
try {
int x = 5;
string s = x switch { 1 => "a", 2 => "b" };
Console.WriteLine(s);
} catch (Exception e) {
Console.WriteLine(e.GetType().Name);
}
}
}Mehrere Eingaben kombinieren
Um anhand mehr als eines Werts zu verzweigen, fassen Sie die Werte in einem Tupel zusammen. Die Arme passen dann auf Tupelmuster und vergleichen jede Position.
Das eignet sich ideal für Zustandsautomaten oder Entscheidungstabellen, bei denen das Ergebnis von einem Wertepaar abhängt. Tupelmuster werden wir in einer späteren Lektion ausführlich behandeln.
bool isWeekend = true; bool isRaining = false;
string plan = (isWeekend, isRaining) switch
{
(true, false) => "Go hiking",
(true, true) => "Watch a movie",
_ => "Work"
};
System.Console.WriteLine(plan);Lesbare Ausdruckskörper
Switch-Ausdrücke lassen sich gut mit LINQ und ausdruckskörperigen Membern kombinieren und ergeben kompakte Verarbeitungsketten.
Da jeder Arm einen Wert zurückgibt, können Sie einen Switch-Ausdruck direkt in einer Select-Projektion oder als Methodenargument verwenden und dadurch temporäre Variablen vermeiden.
using System;
using System.Linq;
class Program {
static void Main() {
var nums = new[] { 1, 2, 3 };
var labels = nums.Select(n => n switch {
1 => "one", 2 => "two", _ => "many"
});
Console.WriteLine(string.Join(",", labels));
}
}Schnelltest
Testen Sie Ihr Verständnis von Switch-Ausdrücken.
Zusammenfassung
Switch-Ausdrücke geben mithilfe von input switch { pattern => result, ... } einen Wert zurück, wobei die Arme durch Kommas getrennt werden.
Verwenden Sie _ als Standardfall und when für Wächterbedingungen. Denken Sie daran, dass die Arme von oben nach unten geprüft werden. Sorgen Sie für Vollständigkeit, um Ausnahmen zur Laufzeit zu vermeiden. Als Nächstes behandeln wir Typ- und Eigenschaftsmuster.
Häufig gestellte Fragen
Ist die Lektion „switch-Ausdrücke“ kostenlos?
Ja — der vollständige Text von „switch-Ausdrücke“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „switch-Ausdrücke“?
Kompakte switch-Ausdrücke mit Rückgabewert. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C# Academy zu starten?
Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „switch-Ausdrücke“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?
Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- switch-Ausdrücke
- Typ- und Property-Patterns
- Relationale und logische Patterns
- Listen- und Tupel-Patterns