Tracks
/
C#
C#
/
Lehrplan
/
switch-Anweisungen
sw

switch-Anweisungen in C#

2 Übungen

Über switch-Anweisungen

In Programmiersprachen haben switch-Anweisungen eine ehrwürdige Geschichte. Sie wurden in C eingeführt, wo man sie für ihre Geschwindigkeit schätzte. Diese Geschwindigkeit ging auf Kosten der Funktionalität, die stark eingeschränkt war. In C# wurde die Rolle der switch-Anweisung über Ganzzahlen hinaus erweitert. switch-Anweisungen können beliebige Typen, Werte oder Referenzen umfassen.

Wenn du aus einer funktionalen Sprache kommst, ist die Arbeit mit switch-Anweisungen (und switch-Ausdrücken, die an anderer Stelle besprochen werden) das, was in C# der Verwendung von diskriminierten Unions und Pattern Matching am nächsten kommt. Allerdings kommen sie bei Weitem nicht an die Fähigkeit diskriminierter Unions heran, Typsicherheit zu erzwingen.

Einfache switch-Anweisungen ähneln ihren C-Vorfahren: Sie kombinieren switch, case, break und default.

int direction = GetDirection();
switch (direction)
{
    case 1:
        GoLeft();
        break;
    case 2:
        GoRight();
        break;
    default:
        MarkTime();
        break;
}

Das obige Muster lässt sich mit jedem einfachen Typ (Primitive und Strings) verwenden.

Wenn Referenztypen mit ins Spiel kommen, ist zusätzliche Syntax nötig, zuerst um den Typ herunterzucasten und dann um Guards (when) hinzuzufügen, obwohl Guards auch bei einfachen Werten verwendet werden können. Das folgende Beispiel veranschaulicht das:

Animal animal = GetAnimal();

switch(animal)
{
    case Dog canine:
    case Coyote canine:
        canine.Bark();
        break;
    case Cat cat when cat.HasOnly8Lives():
        cat.IsCareful();
        cat.Meow();
        break;
    case Cat cat:
        cat.Meow();
        break;
}
  • Die default-Klausel ist optional, aber in der Regel wünschenswert.
  • Die break-Anweisung ist für jede nicht leere case-Klausel obligatorisch.
  • Natürlich müssen sich die Typen aller Argumente der case-Labels vom Typ des switch-Arguments ableiten. Ein switch-Argument vom Typ Object erlaubt offensichtlich die größte Bandbreite.
  • Der Guard-Ausdruck kann alles im Gültigkeitsbereich enthalten, nicht nur Member des case-Arguments.
  • Mehrere case mit unterschiedlichen case-Argumenten können sich auf denselben Block beziehen.

Die Dokumentation zur switch-Anweisung bietet eine Einführung in switch-Anweisungen.

Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab

Lerne switch-Anweisungen

Das Üben ist gesperrt

Schalte 6 weitere Übungen frei, um switch-Anweisungen zu üben