A struct- és osztálytagok számos fajtája (a mezők jelentik az elsődleges kivételt) használhatja a kifejezéstörzsű tag szintaxist. Egy tag kifejezéssel történő definiálása gyakran tömörebb és olvashatóbb kódot eredményez, mint a hagyományos blokkok vagy utasítások.
A metódusok és az írásvédett tulajdonságok is azon tagok közé tartoznak, amelyek kifejezéstörzzsel definiálhatók.
public int Times3(int input) => input * 3;
public int Interesting => 1729;
A switch-kifejezés egy értéket egy mintahalmaz egyik esetéhez illeszt, és visszaadja a hozzá tartozó értéket, vagy végrehajtja a hozzá tartozó műveletet. A hozzárendelést a => szimbólum jelöli. Emellett minden minta rendelkezhet egy opcionális esetőrrel, amelyet a when kulcsszó vezet be. Az esetőr kifejezésnek igazra kell értékelődnie ahhoz, hogy a switch adott „ágát” kiválassza. Az esetek (más néven switch-ágak) szöveges sorrendben értékelődnek ki, és amint egyezést talál, a folyamat leáll, és a hozzá tartozó érték visszaadódik.
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é"
A ternáris operátorok lehetővé teszik, hogy az if-feltételeket kifejezésekben definiáljuk utasításblokkok helyett. Ez a funkcionális programozási megközelítéseket idézi, és gyakran kifejezőbbé és kevésbé hibahajlamossá teheti a kódot.
A ternáris operátor 3 kifejezést kombinál: egy feltételt, amelyet egy kiértékelendő és visszaadandó kifejezés követ, ha a feltétel igaz (az if rész, amelyet a ? vezet be), és egy kiértékelendő és visszaadandó kifejezést, ha a feltétel hamis (az else rész, amelyet a : vezet be).
int a = 3, b = 4;
int max = a > b ? a : b;
// => 4
A throw kifejezések alternatívát jelentenek a throw utasításokkal szemben, és különösen növelhetik a ternáris és más összetett kifejezések erejét.
string trimmed = str == null ? throw new ArgumentException() : str.Trim();
Arra kértek, hogy javíts egy időjárás-állomással kapcsolatos legacy kódon.
Az időjárás-állomás méréseket fogad, és kiír néhány mutatót, például a hőmérsékletet és a nyomást.
Refaktoráld a WeatherStation osztály megfelelő metódusait expression bodied memberek használatával. Ahol megfelelő, használj ternáris műveleteket és switch kifejezéseket, hogy javítsd a kifejezőerőt és esetleg csökkentsd a hibákat.
Biztosítsd, hogy minden teszt továbbra is sikeres legyen.
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) C# nyelvet 62 fogalom178 feladat segítségével, valódi emberi mentorálással, mindez ingyen.