switch-Ausdrücke haben folgende Verbesserungen bekommen:
Die neue Reihenfolge (Variable vor switch) sollte die Trennung von Ausdruck und Anweisung visuell vereinfachen.
=>
ersetzt case
und :
. 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));
};
}
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,
}
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"
};