Övning – Implementera en switch-instruktion
- 11 minuter
En switch instruktion är en C#-markeringsinstruktor som ger ett alternativ till en if-elseif-else förgreningskonstruktion. -instruktionen switch ger fördelar jämfört med en if-elseif-else konstruktion när du utvärderar ett enda värde mot en lista med kända matchande värden.
Tänk på följande scenario:
- Du arbetar med ett program som är relaterat till matnäring. En del av koden handlar om frukt.
- Koden innehåller en variabel med namnet
fruitsom används för att lagra namnet på olika typer av frukt. - Du har en lista över de 20 frukter som ditt program fokuserar på.
- Du vill förgrena koden baserat på värdet som tilldelats till
fruit.
I det här scenariot kan du använda en switch -instruktion för att skapa en separat gren för varje typ av frukt.
Hur fungerar en switch-instruktion?
Instruktionen switch väljer ett kodavsnitt som ska köras från en lista över möjliga växelavsnitt. Det valda växelavsnittet väljs baserat på en mönstermatchning med instruktionens matchningsuttryck.
Överväg följande kodexempel som visar den grundläggande strukturen för -instruktionen switch :
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;
}
Matchningsuttrycket (som även kan kallas för switch-uttrycket) är värdet som följer nyckelordet switch, i det här fallet (fruit). Varje växelavsnitt definieras av ett skiftlägesmönster. Skiftlägesmönster skapas med nyckelordet case följt av ett värde. Det första fallet i det här exemplet är: case "apple":. Skiftlägesmönster är booleska uttryck som utvärderas till antingen true eller false. Varje växelavsnitt innehåller ett litet antal kodrader som körs om skiftlägesmönstret matchar matchningsuttrycket. I det här exemplet, om fruit tilldelas värdet "apple", utvärderas det första case-mönstret som true och det switch-avsnittet körs.
En switch-instruktion måste innehålla minst ett växelavsnitt, men innehåller normalt tre eller flera växelavsnitt.
Växeln används bäst när:
- Du har ett enda värde (variabel eller uttryck) som du vill matcha mot många möjliga värden.
- För en viss matchning måste du köra ett par rader med kod som mest.
Anmärkning
Det här första exemplet på en switch instruktion är målmedvetet enkelt och din undersökning av syntaxen var kort. Du kommer att undersöka ytterligare funktioner i -instruktionen switch när du går igenom några mer avancerade scenarier i avsnitten nedan.
Det är dags att förbereda kodningsmiljön och börja utveckla dina egna switch instruktioner.
Förbereda din kodningsmiljö
Den här modulen innehåller praktiska aktiviteter som vägleder dig genom processen att skapa och köra demonstrationskod. Vi rekommenderar att du slutför dessa aktiviteter med Visual Studio Code som utvecklingsmiljö. Genom att använda Visual Studio Code för dessa aktiviteter kan du bli mer bekväm med att skriva och köra kod i en utvecklarmiljö som används av proffs över hela världen.
Öppna Visual Studio Code.
Du kan använda Windows Start-menyn (eller motsvarande resurs för ett annat operativsystem) för att öppna Visual Studio Code.
På menyn Visual Studio Code-fil väljer du Öppna mapp.
I dialogrutan Öppna mapp navigerar du till mappen Windows Desktop.
Om du har en annan mappplats där du behåller kodprojekt kan du använda den mappplatsen i stället. För den här utbildningen är det viktigt att ha en plats som är lätt att hitta och komma ihåg.
I dialogrutan Öppna mapp väljer du Välj mapp.
Om du ser en säkerhetsdialogruta som frågar om du litar på författarna väljer du Ja.
Välj Ny terminal på visual Studio Code-terminalmenyn.
Observera att en kommandotolk i terminalpanelen visar mappsökvägen för den aktuella mappen. Till exempel:
C:\Users\someuser\Desktop>Anmärkning
Om du arbetar på din egen dator i stället för i en sandbox-miljö eller en värdbaserad miljö och du har slutfört andra Microsoft Learn-moduler i den här C#-serien kanske du redan har skapat en projektmapp för kodexempel. I så fall kan du hoppa över nästa steg, som används för att skapa en konsolapp i mappen TestProject.
I terminalkommandot anger du följande fråga för att skapa ett nytt konsolprogram i en angiven mapp:
dotnet new console -o ./CsharpProjects/TestProjectDet här .NET CLI-kommandot använder en .NET-programmall för att skapa ett nytt C#-konsolprogramprojekt på den angivna mappplatsen. Kommandot skapar mapparna CsharpProjects och TestProject åt dig och använder TestProject som namnet på filen
.csproj.Om ett meddelande visas som talar om för dig att filerna redan finns fortsätter du med nästa steg. Du återanvänder de befintliga projektfilerna.
I utforskarvyn expanderar du mappen CsharpProjects .
Du bör se mappen TestProject och två filer, en C#-programfil med namnet Program.cs och en C#-projektfil med namnet TestProject.csproj.
På menyn Visual Studio Code-fil väljer du Öppna mapp.
I dialogrutan Öppna mapp väljer du mappen CsharpProjects och väljer sedan Välj mapp.
I explorer-vyn expanderar du mappen TestProject och väljer sedan Program.cs.
Ta bort de befintliga kodraderna.
Du kommer att använda det här C#-konsolprojektet för att skapa, skapa och köra kodexempel under den här modulen.
Stäng terminalpanelen.
Skapa och testa en switch-instruktion
Kontrollera att Visual Studio Code är öppet och Program.cs visas i redigeringspanelen.
Anmärkning
Program.cs ska vara tom. Om det inte stämmer, välj och ta bort alla kodrader.
Skriv följande kod i Visual Studio Code-redigeraren:
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}");På menyn Visual Studio Code-fil väljer du Spara.
Filen Program.cs måste sparas innan du skapar eller kör koden.
I explorer-panelen öppnar du en terminal på mappen TestProject genom att högerklicka på TestProject och sedan välja Öppna i integrerad terminal.
En terminalpanel öppnas. Terminalen bör innehålla en kommandotolk som visar att terminalen är öppen för mappen TestProject.
I kommandotolken i Terminal skriver du dotnet run och trycker sedan på Retur för att köra koden.
Anmärkning
Om du ser ett meddelande med texten "Det gick inte att hitta ett projekt att köra" kontrollerar du att Terminal-kommandotolken visar den förväntade platsen för TestProject-mappen. Till exempel:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Du bör se följande utdata:
John Smith, Senior AssociateTa en minut att granska uttalandet
switchsom du angav.Observera att -instruktionen
switchdefinierar ett enda kodblock.-instruktionen
switchdefinierar ett enda kodblock som innehåller en lista över växelavsnitt. Till höger om nyckelordetswitchfinns ett växeluttryck som omges av parenteser.Observera listan över switchavsnitt i kodblocket.
Kodblocket
switchinnehåller en lista över växelavsnitt som var och en innehåller en eller flera växeletiketter. Dessutom innehåller varje switch-avsnitt en instruktionslista som kommer att köras om märkordet är lika med det switch-uttryck som definierats överst i switch-satsen.Switch-uttrycket utvärderas mot case-etiketterna uppifrån och ned tills ett värde som är lika med switch-uttrycket hittas. Om ingen av etiketterna matchar kommer instruktionslistan för
default-fallet att köras. Om inget standardvärde ingår överförs kontrollen till slutpunkten för switch-instruktionen. Varje etikett måste ange en värdetyp som matchar den typ som anges i switch-uttrycket.Anmärkning
Den valfria
defaultetiketten kan visas på valfri plats i listan med växelavsnitt. Men de flesta utvecklare väljer att lägga det sist eftersom det är mer meningsfullt (logiskt) att placeradefaultsom det sista alternativet. Oavsett position utvärderas avsnittetdefaultsist.I vårt exempel:
- switch-uttrycket är
(employeeLevel) - varje växelavsnitt har en etikett för en enda växel (
caseellerdefault). - det matchande växelavsnittet definieras av
case: 200, eftersomemployeeLevel = 200.
- switch-uttrycket är
Observera att varje växelavsnitt är separerat från nästa.
Endast ett växelavsnitt kan köras. Det innebär att körningen av ett växelavsnitt inte tillåts "falla igenom" till nästa växelavsnitt. Nyckelordet
breakär ett av flera sätt att avsluta ett switch-avsnitt innan det kommer till nästa avsnitt. Om du glömmer nyckelordetbreak(eller nyckelordetreturn) genererar kompileraren ett fel.
Ändra nivåvariabelvärdet för att se hur switch-instruktionen utvärderar det
Om du vill använda standardfallet ändrar vi medarbetarens nivå genom att ändra värdetilldelningen.
Om du vill ändra värdet som tilldelats till
employeeLeveluppdaterar du koden enligt följande:int employeeLevel = 201;Spara kodfilen och använd sedan Visual Studio Code för att köra koden.
Ange
dotnet runfrån Terminal-kommandotolken för att köra koden.Observera att utdata har ändrats.
När du kör koden bör du nu se den mer allmänna rubriken som används.
John Smith, AssociateEftersom
employeeLevelinte matchar några etiketter, så matchas endefault-etikett.
Ändra ett växelavsnitt så att det innehåller flera etiketter
Anta att vårt företag bestämde sig för att ge alla anställda på nivå 100 titeln "Senior Associate" – samma titel som nivå 200 anställda. Som utvecklare bestämmer du dig för att implementera detta genom att ta bort det första växelavsnittet som tillhör etiketten case 100:och i stället tillåta att både etiketterna case 100: och case 200: kör samma växelavsnitt.
Om du vill ändra värdet som tilldelats till
employeeLeveluppdaterar du koden enligt följande:int employeeLevel = 100;Om du vill tilldela flera etiketter till det första växelavsnittet uppdaterar du koden på följande sätt:
case 100: case 200: title = "Senior Associate"; break;När du är klar med ändringarna bör ändringarna matcha följande kod:
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}");Spara kodfilen och använd sedan Visual Studio Code för att köra koden.
Ange
dotnet runfrån Terminal-kommandotolken för att köra koden.Du bör se följande utdata:
John Smith, Senior AssociateBåde case-etiketterna
100och200är nu kopplade till switch-sektionen som sätter titeln till strängvärdetSenior Associate.
Sammanfattning
Här är de viktigaste lärdomarna du har fått om switch-instruktionen.
- Använd -instruktionen
switchnär du har ett värde med många möjliga matchningar, där varje matchning kräver en gren i kodlogik. - Ett switch-avsnitt som innehåller kodlogik kan matchas med en eller flera etiketter definierade av nyckelordet
case. - Använd det valfria
defaultnyckelordet för att skapa en etikett och en switch-sektion som används när inga andra case-etiketter matchar.