Øvelse – Implementer en switch-sætning
- 11 minutter
En switch sætning er en C#-markeringssætning, der giver et alternativ til en if-elseif-else forgreningskonstruktion. Sætningen switch giver fordele i forhold til en if-elseif-else konstruktion, når en enkelt værdi evalueres i forhold til en liste over kendte matchende værdier.
Overvej følgende scenarie:
- Du arbejder på en applikation, der er relateret til ernæring. En del af koden omhandler frugt.
- Din kode indeholder en variabel med navnet
fruit, der bruges til at holde navnet på forskellige typer frugt. - Du har en liste over de 20 frugter, som din ansøgning er fokuseret på.
- Du vil forgrene koden på baggrund af den værdi, der er tildelt til
fruit.
I dette scenarie kan du bruge en switch sætning til at oprette en separat forgrening for hver type frugt.
Hvordan fungerer en switch-sætning?
Sætningen switch vælger én kodesektion, der skal udføres, på en liste over mulige switchsektioner. Den valgte switchsektion vælges på baggrund af et mønstermatch med sætningens matchudtryk.
Overvej følgende kodeeksempel, der viser den grundlæggende struktur i switch sætningen:
switch (fruit)
{
case "apple":
Console.WriteLine($"App will display information for apple.");
break;
case "banana":
Console.WriteLine($"App will display information for banana.");
break;
case "cherry":
Console.WriteLine($"App will display information for cherry.");
break;
}
Matchudtrykket (som også kaldes parameterudtrykket) er den værdi, der følger efter nøgleordet switch i dette tilfælde (fruit). Hver switchsektion er defineret af et sagsmønster. Case-mønstre oprettes ved hjælp af nøgleordet case efterfulgt af en værdi. Det første mønster for små bogstaver i dette eksempel er: case "apple":. Case-mønstre er booleske udtryk, der evalueres til enten true eller false. Hver switchsektion indeholder et lille antal kodelinjer, der udføres, hvis casemønsteret er et match for matchudtrykket. Hvis der i dette eksempel fruit tildeles en værdi af typen "apple", evalueres det første casemønster som true , og den pågældende switchsektion udføres.
En switch-sætning skal indeholde mindst én switchsektion, men den vil normalt indeholde tre eller flere switchsektioner.
Kontakten bruges bedst, når:
- Du har en enkelt værdi (variabel eller udtryk), som du vil matche med mange mulige værdier.
- For et givent match skal du højst udføre et par kodelinjer.
Seddel
Dette første eksempel på en switch sætning er målrettet enkel, og din undersøgelse af syntaksen var kort. Du undersøger yderligere funktioner i sætningen switch , når du gennemgår nogle mere avancerede scenarier i afsnittene nedenfor.
Det er tid til at forberede dit kodemiljø og begynde at udvikle dine egne switch udsagn.
Forbered dit kodemiljø
Dette modul indeholder praktiske aktiviteter, der guider dig gennem processen med at bygge og køre demonstrationskode. Vi opfordrer dig til at fuldføre disse aktiviteter ved hjælp af Visual Studio Code som dit udviklingsmiljø. Brug af Visual Studio Code til disse aktiviteter hjælper dig med at blive mere fortrolig med at skrive og køre kode i et udviklermiljø, der bruges af fagfolk over hele verden.
Åbn Visual Studio Code.
Du kan bruge Menuen Start i Windows (eller en tilsvarende ressource for et andet operativsystem) til at åbne Visual Studio Code.
Vælg Åbn mappe i menuen Filer i Visual Studio Code.
Gå til mappen Windows Desktop i dialogboksen Åbn mappe .
Hvis du har en anden mappeplacering, hvor du gemmer kodeprojekter, kan du i stedet bruge denne mappeplacering. Til denne træning er det vigtigt at have en placering, der er nem at finde og huske.
Vælg Vælg mappe i dialogboksen Åbn mappe.
Hvis du får vist en sikkerhedsdialogboks, hvor du bliver spurgt, om du har tillid til forfatterne, skal du vælge Ja.
Vælg Ny terminal i menuen Visual Studio Code Terminal.
Bemærk, at mappestien for den aktuelle mappe vises i en kommandoprompt i terminalpanelet. For eksempel:
C:\Users\someuser\Desktop>Seddel
Hvis du arbejder på din egen pc i stedet for i en sandkasse eller et hostet miljø, og du har fuldført andre Microsoft Learn-moduler i denne C#-serie, har du måske allerede oprettet en projektmappe til kodeeksempler. Hvis det er tilfældet, kan du springe over næste trin, som bruges til at oprette en konsolapp i mappen TestProject.
Angiv følgende prompt ved kommandoprompten Terminal for at oprette et nyt konsolprogram i en angivet mappe:
dotnet new console -o ./CsharpProjects/TestProjectDenne .NET CLI-kommando bruger en .NET-programskabelon til at oprette et nyt C#-konsolprogramprojekt på den angivne mappeplacering. Kommandoen opretter mapperne CsharpProjects og TestProject for dig og bruger TestProject som navnet på filen
.csproj.Hvis der vises en meddelelse om, at filerne allerede findes, skal du fortsætte med de næste trin. Du skal genbruge de eksisterende projektfiler.
Udvid mappen CsharpProjects i STIFINDER-visningen.
Du bør kunne se mappen TestProject og to filer, en C#-programfil med navnet Program.cs og en C#-projektfil med navnet TestProject.csproj.
Vælg Åbn mappe i menuen Filer i Visual Studio Code.
I dialogboksen Åbn mappe skal du vælge mappen CsharpProjects og derefter vælge Vælg mappe.
Udvid mappen TestProject i visningen STIFINDER, og vælg derefter Program.cs.
Slet de eksisterende kodelinjer.
Du skal bruge dette C#-konsolprojekt til at oprette, bygge og køre kodeeksempler under dette modul.
Luk terminalpanelet.
Opret og test en switch-sætning
Sørg for, at Visual Studio Code er åben, og at Program.cs vises i editorpanelet.
Seddel
Program.cs skal være tomt. Hvis det ikke er muligt, skal du vælge og slette alle kodelinjer.
Skriv følgende kode i Visual Studio Code Editor:
int employeeLevel = 200; string employeeName = "John Smith"; string title = ""; switch (employeeLevel) { case 100: title = "Junior Associate"; break; case 200: title = "Senior Associate"; break; case 300: title = "Manager"; break; case 400: title = "Senior Manager"; break; default: title = "Associate"; break; } Console.WriteLine($"{employeeName}, {title}");Vælg Gemi menuen Visual Studio Code File .
Den Program.cs fil skal gemmes, før du kan oprette eller køre koden.
Højreklik på TestProjecti panelet EXPLORER for at åbne en Terminal på mappen TestProject, og vælg derefter Åbn i integreret terminal.
Der åbnes et terminalpanel. Terminalen skal indeholde en kommandoprompt, der viser, at Terminal er åben for din TestProject-mappeplacering.
I kommandoprompten Terminal skal du skrive dotnet run og derefter trykke på Enter for at køre din kode.
Seddel
Hvis du får vist en meddelelse med teksten "Et projekt, der ikke kan køres", skal du kontrollere, at terminalkommandoprompten viser den forventede placering af mappen TestProject. Eksempel:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Du bør se følgende output:
John Smith, Senior AssociateBrug et øjeblik på at gennemse den
switcherklæring, du har angivet.Bemærk, at sætningen
switchdefinerer en enkelt kodeblok.Sætningen
switchdefinerer en enkelt kodeblok, der indeholder en liste over switchsektioner. Til højre for nøgleordetswitcher et parameterudtryk , der er omsluttet af parenteser.Bemærk listen over switchsektioner i kodeblokken.
Kodeblokken
switchindeholder en liste over switchsektioner, som hver især indeholder et eller flere switchnavne. Desuden indeholder hver switchsektion en sætningsliste, der udføres, hvis etiketten er lig med det switch-udtryk, der er defineret øverst i switch-sætningen.Switch-udtrykket evalueres i forhold til sagsmærkater fra top til bund, indtil der findes en værdi, der er lig med switch-udtrykket. Hvis ingen af mærkaterne stemmer overens, udføres sætningslisten for sagen
default. Hvis der ikke er inkluderet nogen standard, overføres kontrolelementet til slutpunktet for switch-sætningen. Hver etiket skal angive en værditype, der svarer til den type, der er angivet i switchudtrykket.Seddel
Den valgfrie
defaultetiket kan vises på en vilkårlig placering på listen over switchsektioner. Men de fleste udviklere vælger at sætte det sidst, fordi det giver mere mening (logisk) at positioneredefaultsom den endelige mulighed. Uanset positionendefaultevalueres sektionen sidst.I vores eksempel:
- parameterudtrykket er
(employeeLevel) - hver kontaktsektion har en enkelt kontaktetiket (
caseellerdefault). - den tilsvarende switchsektion er defineret af
case: 200, sidenemployeeLevel = 200.
- parameterudtrykket er
Bemærk, at hver switchsektion er adskilt fra den næste.
Der må kun udføres én parametersektion. Det betyder, at udførelse af en kontaktsektion ikke er tilladt at "falde igennem" til næste kontaktsektion. Nøgleordet
breaker en af flere måder at afslutte en switchsektion på, før det kommer til næste afsnit. Hvis du glemmer nøgleordetbreak(eller eventuelt nøgleordetreturn), genererer compileren en fejl.
Skift variabelværdien på niveau for at se, hvordan switch-sætningen evaluerer den
Lad os ændre medarbejderens niveau ved at ændre værditildelingen for at gøre brug af standardcasen.
Hvis du vil ændre den værdi, der er tildelt ,
employeeLevelskal du opdatere din kode på følgende måde:int employeeLevel = 201;Gem din kodefil, og brug derefter Visual Studio Code til at køre din kode.
Angiv
dotnet runfra Terminal-kommandoprompten for at køre din kode.Bemærk, at outputtet er ændret.
Når du kører koden, kan du nu se den mere generiske titel, der bruges.
John Smith, AssociateemployeeLevelDa ikke stemmer overens med nogen navne,defaultmatches etiketten.
Rediger en switchsektion, så den indeholder flere navne
Lad os antage, at vores firma har besluttet at give alle medarbejdere på niveau 100 titlen "Senior Associate" – samme titel som niveau 200 medarbejdere. Som udvikler beslutter du at implementere dette ved at fjerne den første kontaktsektion, der hører til etiketten case 100:, og i stedet tillade, at både case 100: navne og case 200: udføres den samme switchsektion.
Hvis du vil ændre den værdi, der er tildelt ,
employeeLevelskal du opdatere din kode på følgende måde:int employeeLevel = 100;Hvis du vil tildele flere navne til den første switchsektion, skal du opdatere din kode på følgende måde:
case 100: case 200: title = "Senior Associate"; break;Når du er færdig med at foretage ændringer, skal dine ændringer stemme overens med følgende kode:
int employeeLevel = 100; string employeeName = "John Smith"; string title = ""; switch (employeeLevel) { case 100: case 200: title = "Senior Associate"; break; case 300: title = "Manager"; break; case 400: title = "Senior Manager"; break; default: title = "Associate"; break; } Console.WriteLine($"{employeeName}, {title}");Gem din kodefil, og brug derefter Visual Studio Code til at køre din kode.
Angiv
dotnet runfra Terminal-kommandoprompten for at køre din kode.Du bør se følgende output:
John Smith, Senior AssociateBegge sagsmærkater
100og200er nu parret med switchsektionen, der angiver titlen til strengværdienSenior Associate.
Resumé
Her er de vigtigste takeaways, du har lært om switch-sætningen:
- Brug sætningen
switch, når du har én værdi med mange mulige match, hvor hvert match kræver en forgrening i kodelogikken. - En enkelt switchsektion, der indeholder kodelogik, kan matches ved hjælp af et eller flere mærkater, der er defineret af nøgleordet
case. - Brug det valgfri
defaultnøgleord til at oprette en etiket og en switchsektion, der bruges, når ingen andre navne på store og små bogstaver stemmer overens.