Viele Arten von Membern in Structs und Klassen (Felder sind die wichtigste Ausnahme) können die Syntax für Ausdruckskörper-Member verwenden. Wenn du ein Member mit einem Ausdruck definierst, entsteht oft kompakterer und lesbarerer Code als mit traditionellen Blöcken bzw. Anweisungen.
Methoden und schreibgeschützte Eigenschaften gehören zu den Membern, die mit einem Ausdruckskörper definiert werden können.
public int Times3(int input) => input * 3;
public int Interesting => 1729;
Ein Switch-Ausdruck kann einen Wert einem Fall aus einer Menge von Mustern zuordnen und den zugehörigen Wert zurückgeben oder die zugehörige Aktion ausführen. Die Zuordnung wird durch das Symbol => angezeigt. Außerdem kann jedes Muster eine optionale Fallbedingung haben, die mit dem Schlüsselwort when eingeleitet wird. Der Ausdruck der Fallbedingung muss wahr ergeben, damit dieser „Zweig“ des Switch ausgewählt wird. Die Fälle (auch Switch-Zweige genannt) werden in der Reihenfolge des Textes ausgewertet, und sobald eine Übereinstimmung gefunden wird, wird der Vorgang abgebrochen und der zugehörige Wert zurückgegeben.
double xx = 42d;
string interesting = xx switch
{
0 => "I suppose zero is interesting",
3.14 when DateTime.Now.Day == 14 && DateTime.Now.Month == 3 => "Mmm pie!",
3.14 => "π",
42 => "a bit of a cliché",
1729 => "only if you are a pure mathematician",
_ => "not interesting"
};
// => interesting == "a bit of a cliché"
Ternäre Operatoren erlauben es, if-Bedingungen in Ausdrücken statt in Anweisungsblöcken zu definieren. Das erinnert an Ansätze aus der funktionalen Programmierung und kann Code oft ausdrucksstärker und weniger fehleranfällig machen.
Der ternäre Operator kombiniert 3 Ausdrücke: eine Bedingung, gefolgt von einem Ausdruck, der ausgewertet und zurückgegeben wird, wenn die Bedingung wahr ist (der if-Teil, eingeleitet durch ?), und einem Ausdruck, der ausgewertet und zurückgegeben wird, wenn die Bedingung falsch ist (der else-Teil, eingeleitet durch :).
int a = 3, b = 4;
int max = a > b ? a : b;
// => 4
throw-Ausdrücke sind eine Alternative zu throw-Anweisungen und können insbesondere die Ausdrucksstärke von ternären und anderen zusammengesetzten Ausdrücken erhöhen.
string trimmed = str == null ? throw new ArgumentException() : str.Trim();
Du sollst etwas Legacy-Code zu einer Wetterstation verbessern.
Die Wetterstation nimmt Messwerte entgegen und gibt einige Kennwerte wie Temperatur und Luftdruck aus.
Refaktoriere geeignete Methoden der Klasse WeatherStation mit Ausdruckskörper-Membern. Nutze wo sinnvoll ternäre Operatoren und switch-Ausdrücke, um die Ausdruckskraft zu verbessern und möglicherweise Fehler zu reduzieren.
Stelle sicher, dass weiterhin alle Tests bestehen.
Melde dich bei Exercism an, um C# mit 62 Konzepte178 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.