C# Academy · Lektion

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.

Lektion 2 von 38 Schritte

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

Kurze Überprüfung: Wie können Sie in C# 6 eine vollständige switch-Behandlung ähnlich einem switch-Ausdruck mit when nachbilden?

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.

Kostenlos starten

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

  1. is-Muster sowie relationale und logische Muster (C#-6-Emulation)
  2. switch-Ausdrücke und Vollständigkeitsprüfungen mit when (C#-6-Emulation)
  3. Domänenmodellierung mit diskriminierten Vereinigungen (Records) – C#-6-Emulation
← Zurück zu C# Academy