C# 8 - Verbesserungen am Musterabgleich's image'

604
Jun's profile picture'
Thema
Thema
Fragen
Analytics

switch-Ausdrücke

switch-Ausdrücke haben folgende Verbesserungen bekommen:

  • Die neue Reihenfolge (Variable vor switch) sollte die Trennung von Ausdruck und Anweisung visuell vereinfachen.

  • => ersetzt caseund :. Dies ist intuitiver, präziser und einfacher zu lesen.

  • _ ersetzt den default-Fall

  • Die Textkörper sind nun Ausdrücke und keine Anweisungen mehr.

public enum Vehicles
{
    Unicycle,
    Bicycle,
    Tricycle,
}

// Neu
public static int GetWheelCount(Vehicles myRide) =>
    myRide switch
    {
        Vehicles.Unicycle  => 1,
        Vehicles.Bicycle   => 2,
        Vehicles.Tricycle  => 3,
        _                  => throw new ArgumentException(message: "invalid enum value", paramName: nameof(myRide)),
    };

// Alt
public static int GetWheelCountOld(Vehicles myRide)
{
    switch (myRide)
    {
        case Vehicles.Unicycle:
            return 1;
        case Vehicles.Bicycle:
            return 2;
        case Vehicles.Tricycle:
            return 3;
        default:
            throw new ArgumentException(message: "invalid enum value", paramName: nameof(myRide));
    };
}

Eigenschaftsmuster

Es ist nun auch moeglich switch-Ausdrücke auf die Eigenschaften anzuwenden:

public static string GetAbbreviatedName(string name) => 
    name switch  {
       { Length: >= 5 } => name.Substring(0, 5),
       _ => name,
}

Tupelmuster

Mit Tupelmuster koennen mehrere Werte in einem switch-Ausdruck angewendet werden

public static string RockPaperScissors(string first, string second)
    => (first, second) switch
    {
        ("Stein", "Papier") => "Das Papier wickelt den Stein ein, Papier gewinnt.",
        ("Stein", "Schere") => "Der Stein macht die Schere stumpf, Stein gewinnt.",
        ("Papier", "Stein") => "Das Papier wickelt den Stein ein, Papier gewinnt.",
        ("Papier", "Schere") => "Die Schere schneidet das Papier, Schere gewinnt.",
        ("Schere", "Stein") => "Der Stein macht die Schere stumpf, Stein gewinnt.",
        ("Schere", "Papier") => "Die Schere schneidet das Papier, Schere gewinnt.",
        (_, _) => "Unentschieden"
    };

Untergeordnete Themen (0)
Alle Inhalte auf dieser Seite stehen, soweit nicht anders angegeben, unter der Lizenz Creative Commons Namensnennung 4.0 (CC-BY-4.0). Einzelne Elemente (aus anderen Quellen übernommene Fragen, Bilder, Videos, Textabschnitte etc.) können anderen Lizenzen unterliegen und sind entsprechend gekennzeichnet.