switch-lausekkeet
Tiiviit arvon palauttavat switch-lausekkeet.
switch-lausekkeet on ilmainen C# Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu C# Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. C# Academy-kurssilla on yhteensä 4 oppituntia.
Mikä switch-lauseke on
Switch-lauseke vertaa syötettä useisiin kuvioihin ja palauttaa arvon. Toisin kuin perinteinen switch-lause, se on lauseke, joten se tuottaa tuloksen, jonka voitte sijoittaa muuttujaan tai palauttaa.
Siinä arvoa seuraa avainsana switch, ja haarat kirjoitetaan muodossa pattern => result. Näin haarautumislogiikasta tulee tiivistä ja funktionaalista.
int code = 2;
string name = code switch
{
1 => "One",
2 => "Two",
_ => "Other"
};
System.Console.WriteLine(name);Lause ja lauseke
Vanha switch-lause käyttää case-tunnisteita ja break-avainsanaa. Uudempi switch-lauseke jättää nämä avainsanat kokonaan pois.
Haarat erotetaan pilkuilla, koko rakenne päättyy puolipisteeseen, ja kukin haara tuottaa arvon sen sijaan, että suoritettaisiin läpivirtaavia koodilohkoja. Näin vältetään kokonainen luokka unohtuneen breakin aiheuttamia virheitä.
// Statement style
switch (code) { case 1: result = "One"; break; }
// Expression style
result = code switch { 1 => "One", _ => "?" };Hylkäyshaara
Alaviiva _ on hylkäyskuvio. Se vastaa mitä tahansa ja toimii oletustapauksena.
Switch-lausekkeiden on oltava kattavia: jos mikään haara ei vastaa suorituksen aikana, heitetään SwitchExpressionException. Lisäämällä _-haaran varmistatte osuman jokaiselle mahdolliselle syötteelle.
using System;
class Program {
static void Main() {
int n = 7;
string size = n switch {
< 5 => "small",
_ => "big"
};
Console.WriteLine(size);
}
}Vakiokuviot
Yksinkertaisimmassa haarassa käytetään vakiokuviota: literaaliarvoa, johon syötettä verrataan yhtäsuuruusvertailulla.
Vakioita voivat olla luvut, merkkijonot, merkit, enum-jäsenet tai nimetyt vakiot. Ne käsitellään ylhäältä alas, joten sijoittakaa tarkimmat tai yleisimmät haarat ensin.
char grade = 'B';
string label = grade switch
{
'A' => "Excellent",
'B' => "Good",
'C' => "Fair",
_ => "Needs work"
};
System.Console.WriteLine(label);Arvon palauttaminen metodista
Switch-lausekkeet ovat erityisen hyödyllisiä metodeissa. Koska koko rakenne on lauseke, voitte palauttaa sen suoraan, usein yksirivisenä lausekerunkona toteutettuna metodina.
Näin muunnettava logiikka säilyy luettavana ja keskitettynä sen sijaan, että if/else if -ketjut hajautuisivat metodin runkoon.
using System;
class Program {
static string Day(int d) => d switch {
0 => "Sun", 6 => "Sat", _ => "Weekday"
};
static void Main() => Console.WriteLine(Day(6));
}Enumien käsittely switch-lausekkeilla
Enumit sopivat luontevasti yhteen switch-lausekkeiden kanssa. Kussakin haarassa nimetään enum-jäsen, ja kääntäjä voi ilmoittaa puuttuvasta tapauksesta, jos hylkäyshaara jätetään pois.
Silti _-haaran säilyttäminen on järkevää, jotta tulevat enum-arvot eivät aiheuta sovelluksen kaatumista suorituksen aikana.
using System;
enum Light { Red, Yellow, Green }
class Program {
static void Main() {
Light l = Light.Green;
string action = l switch {
Light.Red => "Stop",
Light.Yellow => "Slow",
Light.Green => "Go",
_ => "?"
};
Console.WriteLine(action);
}
}when-vartioehdot
when-vartioehto lisää haaraan totuusarvoisen ehdon. Haara täsmää vain, jos sekä kuvio että vartioehto ovat tosia.
Näin osumia voi tarkentaa mielivaltaisella logiikalla, jota pelkkä kuvio ei pysty ilmaisemaan, esimerkiksi yhdistämällä vaihteluvälitarkistuksia muihin muuttujiin.
int temp = 30;
string weather = temp switch
{
int t when t < 0 => "Freezing",
int t when t < 20 => "Cool",
_ => "Warm"
};
System.Console.WriteLine(weather);Järjestyksellä on merkitystä
Haarat testataan lähdekoodin mukaisessa järjestyksessä. Ensimmäinen täsmäävä haara valitaan, joten tarkempien kuvioiden on oltava yleisempiä ennen.
Jos yleinen haara on tarkkaa kuviota ennen, kääntäjä ilmoittaa myöhemmän haaran saavuttamattomaksi. Lukekaa haarat ylhäältä alas suppilona kapeasta laajaan.
int score = 95;
string tier = score switch
{
>= 90 => "Gold",
>= 70 => "Silver",
_ => "Bronze"
};
System.Console.WriteLine(tier);Kattavuus ja poikkeukset
Jos kaikki syötteet eivät kuulu haaroihin eikä mikään haara täsmää, suoritusympäristö heittää poikkeuksen System.Runtime.CompilerServices.SwitchExpressionException.
Kääntäjä antaa varoituksen CS8509, kun se ei pysty todistamaan kattavuutta. Suhtautukaa varoitukseen vakavasti: lisätkää hylkäyshaara tai käsitelkää puuttuvat arvot, jotta lauseke kattaa kaikki tapaukset.
using System;
class Program {
static void Main() {
try {
int x = 5;
string s = x switch { 1 => "a", 2 => "b" };
Console.WriteLine(s);
} catch (Exception e) {
Console.WriteLine(e.GetType().Name);
}
}
}Useiden syötteiden yhdistäminen
Kun haluatte käsitellä useampaa kuin yhtä arvoa, kootkaa ne tupleksi. Tällöin haarat täsmäävät tuplekuvioihin ja vertaavat kutakin paikkaa.
Tämä sopii erinomaisesti tilakoneisiin tai päätöstaulukoihin, joissa tulos riippuu kahdesta tekijästä. Tutustumme tuplekuvioihin perusteellisesti myöhemmässä oppitunnissa.
bool isWeekend = true; bool isRaining = false;
string plan = (isWeekend, isRaining) switch
{
(true, false) => "Go hiking",
(true, true) => "Watch a movie",
_ => "Work"
};
System.Console.WriteLine(plan);Luettavat lauserungot
Switch-lausekkeet toimivat hyvin yhdessä LINQ:n ja lauserunkona toteutettujen jäsenten kanssa, joten niillä voi muodostaa tiiviitä käsittelyketjuja.
Koska jokainen haara palauttaa arvon, voitte käyttää switch-lauseketta suoraan Select-projektion sisällä tai metodin argumenttina ilman väliaikaisia muuttujia.
using System;
using System.Linq;
class Program {
static void Main() {
var nums = new[] { 1, 2, 3 };
var labels = nums.Select(n => n switch {
1 => "one", 2 => "two", _ => "many"
});
Console.WriteLine(string.Join(",", labels));
}
}Pikatarkistus
Testatkaa, kuinka hyvin ymmärrätte switch-lausekkeita.
Kertaus
Switch-lausekkeet palauttavat arvon käyttämällä muotoa input switch { pattern => result, ... }, jossa haarat erotetaan pilkuilla.
Käyttäkää _-haaraa oletustapauksena ja when-ehtoa vartioehtona. Muistakaa, että haarat testataan ylhäältä alas. Varmistakaa kattavuus, jotta suorituksen aikaisilta poikkeuksilta vältytään. Seuraavaksi tutustumme tyyppi- ja ominaisuuskuvioihin.
Opi C# tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 93
- Oppitunnit
- 346
Usein kysytyt kysymykset
Onko oppitunti ”switch-lausekkeet” ilmainen?
Kyllä – oppitunnin ”switch-lausekkeet” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko C# Academy-kurssin, päivitä CoddyKit PROhon. C# Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”switch-lausekkeet”?
Tiiviit arvon palauttavat switch-lausekkeet. Harjoittelet C# Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni C# Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin C# Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”switch-lausekkeet”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä C# Academy-oppitunnilla?
Kyllä. Jokainen C# Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.