switch-Ausdrücke und Vollständigkeitsprüfungen mit when (C#-6-Emulation)
Emulieren Sie switch-Ausdrücke mit klassischen switch-Methoden, die Werte zurückgeben, ergänzen Sie Guard-Prüfungen und verwenden Sie default-Fehler, um unbehandelte Fälle zur Laufzeit zu erkennen.
switch-Ausdrücke und Vollständigkeitsprüfungen mit when (C#-6-Emulation) ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 3. 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 3 Lektionen.
Plan: Switch-Emulation
Ziel: Moderne Switch-Ausdrücke in C# 6 nachbilden.
- Geben Sie Werte aus einem klassischen switch zurück
- Prüfen Sie vorab mit Guards
- Brechen Sie über default throw schnell ab, um Vollständigkeit sicherzustellen
Switch mit Rückgabewert
Ein switch, der einen Wert zurückgibt, verhält sich wie ein switch-Ausdruck. Der default throw fängt unbekannte Werte ab.
using System;
public enum Grade { A, B, C, D, F }
public class Program
{
static string Describe(Grade g)
{
switch (g)
{
case Grade.A: return "Excellent";
case Grade.B: return "Good";
case Grade.C: return "Average";
case Grade.D: return "Below average";
case Grade.F: return "Fail";
default: throw new ArgumentOutOfRangeException("g");
}
}
public static void Main(string[] args)
{
Console.WriteLine(Describe(Grade.A));
Console.WriteLine(Describe(Grade.F));
}
}
„when“ mit Guards
Verwenden Sie Guard-Prüfungen (if-Abfragen), um when-Klauseln nachzubilden. Validieren Sie zunächst die Eingaben und verzweigen Sie anschließend anhand von Wertebereichen.
using System;
public class Program
{
// Emulate: switch(score) { case var s when s >= 90: ... } using pre-guards
static string LabelScore(int score)
{
if (score < 0 || score > 100) throw new ArgumentOutOfRangeException("score");
if (score >= 90) return "A";
if (score >= 80) return "B";
if (score >= 70) return "C";
if (score >= 60) return "D";
return "F";
}
public static void Main(string[] args)
{
Console.WriteLine(LabelScore(92)); // A
Console.WriteLine(LabelScore(77)); // C
}
}
Vollständigkeitshelfer
Fügen Sie einen kleinen Exhaustive.Unhandled-Helfer hinzu und rufen Sie ihn im default-Zweig auf. Tests schlagen fehl, wenn ein neuer Enum-Wert nicht behandelt wird.
using System;
public enum Status { New, Active, Closed }
public static class Exhaustive
{
public static Exception Unhandled(object x)
{
return new InvalidOperationException("Unhandled case: " + x);
}
}
public class Program
{
static int ToHttp(Status s)
{
switch (s)
{
case Status.New: return 201;
case Status.Active: return 200;
case Status.Closed: return 410;
default: throw Exhaustive.Unhandled(s);
}
}
public static void Main(string[] args)
{
Console.WriteLine(ToHttp(Status.Active)); // 200
}
}
Guards + switch nach Art
Validieren Sie die Daten jedes Zweigs mit Vorab-Guards und führen Sie dann einen switch über den Diskriminator aus. Das bildet „when“ für Fälle nach.
using System;
public enum ShapeKind { Circle, Square }
public sealed class Shape
{
public ShapeKind Kind;
public double Radius; // for circle
public double Side; // for square
}
public class Program
{
static double Area(Shape s)
{
if (s == null) throw new ArgumentNullException("s");
// “when” guards (validate needed fields)
if (s.Kind == ShapeKind.Circle && s.Radius < 0) throw new ArgumentException("Radius must be >= 0");
if (s.Kind == ShapeKind.Square && s.Side < 0) throw new ArgumentException("Side must be >= 0");
switch (s.Kind)
{
case ShapeKind.Circle: return Math.PI * s.Radius * s.Radius;
case ShapeKind.Square: return s.Side * s.Side;
default: throw new InvalidOperationException("Unhandled shape: " + s.Kind);
}
}
public static void Main(string[] args)
{
Shape c = new Shape { Kind = ShapeKind.Circle, Radius = 2.0 };
Console.WriteLine("Area circle = " + Area(c));
}
}
Tipps und Fallstricke
Tipps:
- Bevorzugen Sie kleine Methoden mit Rückgabewert (Einzelverantwortung).
- Lassen Sie default eine Ausnahme auslösen, damit fehlende Fälle früh sichtbar werden.
- Platzieren Sie Guards vor dem switch; sie verhalten sich wie when-Bedingungen.
Nachbildung der Vollständigkeit
Zusammenfassung
Zusammenfassung: Geben Sie aus einem klassischen switch wie aus einem switch-Ausdruck zurück, ergänzen Sie Guards für „when“ und behalten Sie einen default throw bei, um fehlende Fälle sichtbar zu machen.
Lerne C# mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 93
- Lektionen
- 346
Häufig gestellte Fragen
Ist die Lektion „switch-Ausdrücke und Vollständigkeitsprüfungen mit when (C#-6-Emulation)“ kostenlos?
Ja — der vollständige Text von „switch-Ausdrücke und Vollständigkeitsprüfungen mit when (C#-6-Emulation)“ 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 3 Lektionen.
Was lerne ich in „switch-Ausdrücke und Vollständigkeitsprüfungen mit when (C#-6-Emulation)“?
Emulieren Sie switch-Ausdrücke mit klassischen switch-Methoden, die Werte zurückgeben, ergänzen Sie Guard-Prüfungen und verwenden Sie default-Fehler, um unbehandelte Fälle zur Laufzeit zu erkennen. 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 2 von 3.
Wie lange dauert die Lektion „switch-Ausdrücke und Vollständigkeitsprüfungen mit when (C#-6-Emulation)“?
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
- is-Muster sowie relationale und logische Muster (C#-6-Emulation)
- switch-Ausdrücke und Vollständigkeitsprüfungen mit when (C#-6-Emulation)
- Domänenmodellierung mit diskriminierten Vereinigungen (Records) – C#-6-Emulation