Ćwiczenie: Zaimplementuj instrukcję switch
- {liczbaMinut} minut
Instrukcja switch to instrukcja wyboru języka C#, która stanowi alternatywę dla konstrukcji rozgałęziania if-elseif-else . Instrukcja switch zapewnia przewagę nad konstrukcją if-elseif-else podczas obliczania pojedynczej wartości względem listy znanych wartości pasujących.
Rozważmy następujący scenariusz:
- Pracujesz nad aplikacją związaną z odżywianiem żywnościowym. Sekcja kodu zajmuje się owocami.
- Kod zawiera zmienną o nazwie
fruit, która jest używana do przechowywania nazwy różnych typów owoców. - Masz listę 20 owoców, na których koncentruje się aplikacja.
- Chcesz rozgałęzić kod na podstawie wartości przypisanej do
fruit.
W tym scenariuszu można użyć switch instrukcji , aby utworzyć oddzielną gałąź dla każdego typu owoców.
Jak działa instrukcja switch?
Instrukcja switch wybiera jedną sekcję kodu do wykonania z listy możliwych sekcji przełączników. Wybrana sekcja przełącznika jest określana na podstawie zgodności wzorca z wyrażeniem dopasowania instrukcji.
Rozważmy następujący przykładowy kod, który pokazuje podstawową strukturę instrukcji 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;
}
Wyrażenie dopasowania (które może być również określane jako wyrażenie przełącznika) jest wartością następującą po switch słowem kluczowym, w tym przypadku jest (fruit). Każda sekcja przełącznika jest definiowana przez wzorzec przypadków. Wzorce przypadków są konstruowane z wykorzystaniem słowa kluczowego case, po którym następuje wartość. Pierwszy wzorzec przypadku w tym przykładzie to: case "apple":. Wzorce przypadków to wyrażenia logiczne, które są oceniane na wartość true lub false. Każda sekcja przełącznika zawiera niewielką liczbę wierszy kodu, które zostaną wykonane, jeśli wzorzec przypadku jest zgodny z wyrażeniem dopasowania. W tym przykładzie, jeśli fruit zostanie przypisana wartość "apple", pierwszy wzorzec przypadku zostanie obliczony jako true i ta sekcja przełącznika zostanie wykonana.
Instrukcja switch musi zawierać co najmniej jedną sekcję przełącznika, ale zwykle zawiera trzy lub więcej sekcji przełącznika.
Przełącznik najlepiej używać w następujących przypadkach:
- Masz pojedynczą wartość (zmienną lub wyrażenie), którą chcesz dopasować do wielu możliwych wartości.
- W przypadku każdego dopasowania musisz wykonać co najwyżej kilka wierszy kodu.
Uwaga / Notatka
Ten pierwszy przykład instrukcji switch jest celowo prosty, a badanie składni było zwięzłe. Podczas pracy z niektórymi bardziej zaawansowanymi scenariuszami w poniższych sekcjach będziesz przyglądać się dodatkowym funkcjom instrukcji switch.
Nadszedł czas, aby przygotować środowisko kodowania i rozpocząć tworzenie własnych switch instrukcji.
Przygotowywanie środowiska kodowania
Ten moduł zawiera praktyczne działania, które prowadzą Cię przez proces tworzenia i uruchamiania kodu demonstracyjnego. Zachęcamy do wykonania tych działań przy użyciu programu Visual Studio Code jako środowiska programistycznego. Korzystanie z programu Visual Studio Code dla tych działań pomoże Ci lepiej pisać i uruchamiać kod w środowisku deweloperów używanym przez specjalistów na całym świecie.
Otwórz program Visual Studio Code.
Aby otworzyć program Visual Studio Code, możesz użyć menu Start systemu Windows (lub równoważnego zasobu dla innego systemu operacyjnego).
W menu Plik programu Visual Studio Code wybierz pozycję Otwórz folder.
W oknie dialogowym Otwieranie folderu przejdź do folderu Pulpit systemu Windows.
Jeśli masz inną lokalizację folderu, w której są utrzymywane projekty kodu, możesz zamiast tego użyć tej lokalizacji folderu. Na potrzeby tego szkolenia ważne jest, aby mieć lokalizację, która jest łatwa do zlokalizowania i zapamiętania.
W oknie dialogowym Otwieranie folderu wybierz pozycję Wybierz folder.
Jeśli zostanie wyświetlone okno dialogowe zabezpieczeń z pytaniem, czy ufasz autorom, wybierz pozycję Tak.
W menu Terminal programu Visual Studio Code wybierz pozycję Nowy terminal.
Zwróć uwagę, że wiersz polecenia w panelu Terminal wyświetla ścieżkę folderu dla bieżącego folderu. Przykład:
C:\Users\someuser\Desktop>Uwaga / Notatka
Jeśli pracujesz na własnym komputerze, a nie w piaskownicy lub w środowisku hostowanym i ukończono inne moduły Microsoft Learn w tej serii języka C#, być może utworzono już folder projektu dla przykładów kodu. Jeśli tak jest, możesz pominąć następny krok, który służy do tworzenia aplikacji konsolowej w folderze TestProject.
W wierszu polecenia terminalu, aby utworzyć nową aplikację konsolową w określonym folderze, wprowadź następujący monit:
dotnet new console -o ./CsharpProjects/TestProjectTo polecenie interfejsu wiersza polecenia platformy .NET używa szablonu programu .NET do utworzenia nowego projektu aplikacji konsolowej języka C# w określonej lokalizacji folderu. Polecenie tworzy foldery CsharpProjects i TestProject i używa elementu TestProject jako nazwy
.csprojpliku.Jeśli zostanie wyświetlony komunikat informujący o tym, że pliki już istnieją, przejdź do następnych kroków. Użyjesz ponownie istniejących plików projektu.
W widoku EKSPLORATOR rozwiń folder CsharpProjects .
Powinien zostać wyświetlony folder TestProject i dwa pliki, plik programu C# o nazwie Program.cs i plik projektu C# o nazwie TestProject.csproj.
W menu Plik programu Visual Studio Code wybierz pozycję Otwórz folder.
W oknie dialogowym Otwieranie folderu wybierz folder CsharpProjects , a następnie wybierz pozycję Wybierz folder.
W widoku EKSPLORATOR rozwiń folder TestProject, a następnie wybierz pozycję Program.cs.
Usuń istniejące wiersze kodu.
Ten projekt konsoli języka C# będzie używany do tworzenia, kompilowania i uruchamiania przykładów kodu w tym module.
Zamknij panel Terminal.
Tworzenie i testowanie instrukcji switch
Upewnij się, że program Visual Studio Code jest otwarty, a plik Program.cs wyświetlany w panelu Edytora.
Uwaga / Notatka
Program.cs powinny być puste. Jeśli tak nie jest, zaznacz i usuń wszystkie wiersze kodu.
Wpisz następujący kod w edytorze programu Visual Studio Code:
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}");W menu Plik programu Visual Studio Code wybierz pozycję Zapisz.
Przed utworzeniem lub uruchomieniem kodu należy zapisać plik Program.cs.
W panelu EKSPLORATOR, aby otworzyć terminal w lokalizacji folderu TestProject, kliknij prawym przyciskiem myszy pozycję TestProject, a następnie wybierz polecenie Otwórz w zintegrowanym terminalu.
Zostanie otwarty panel terminalu. Terminal powinien zawierać wiersz polecenia pokazujący, że terminal jest otwarty w lokalizacji folderu TestProject.
W wierszu polecenia terminalu, aby uruchomić kod, wpisz dotnet run , a następnie naciśnij Enter.
Uwaga / Notatka
Jeśli zostanie wyświetlony komunikat "Nie można odnaleźć projektu do uruchomienia", upewnij się, że w wierszu polecenia terminalu zostanie wyświetlona oczekiwana lokalizacja folderu TestProject. Przykład:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Powinny zostać wyświetlone następujące dane wyjściowe:
John Smith, Senior AssociatePoświęć minutę na przejrzenie wprowadzonego oświadczenia
switch.Zwróć uwagę, że instrukcja
switchdefiniuje pojedynczy blok kodu.Instrukcja
switchdefiniuje pojedynczy blok kodu zawierający listę sekcji przełącznika. Po prawej stronie słowa kluczowegoswitchjest wyrażenie przełącznika ujęte w nawiasy.Zwróć uwagę na listę sekcji przełączników wewnątrz bloku kodu.
Blok
switchkodu zawiera listę sekcji przełączników, z których każda zawiera co najmniej jedną etykietę przełącznika. Ponadto, każda sekcja przełącznika zawiera listę instrukcji, które zostaną wykonane, jeśli etykieta jest równa wyrażeniu switch zdefiniowanemu u góry instrukcji switch.Wyrażenie przełącznika jest oceniane względem etykiet przypadków od góry do dołu do momentu znalezienia wartości równej wyrażeniu przełącznika. Jeśli żadne z oznaczeń nie jest zgodne, zostanie wykonana lista instrukcji dla przypadku
default. Jeśli nie zostanie uwzględniona żadna wartość domyślna, kontrolka zostanie przeniesiona do punktu końcowego instrukcji switch. Każda etykieta musi podać typ wartości zgodny z typem określonym w wyrażeniu przełącznika.Uwaga / Notatka
Opcjonalna
defaultetykieta może pojawić się na dowolnej pozycji na liście sekcji przełącznika. Jednak większość deweloperów decyduje się umieścić ją na końcu, ponieważ bardziej sensowne (logicznie) jest pozycjonowaniedefaultjako ostatnią opcją. Niezależnie od pozycjidefaultsekcja zostanie obliczona jako ostatnia.W naszym przykładzie:
- wyrażenie przełącznika to
(employeeLevel) - każda sekcja przełącznika ma pojedynczą etykietę przełącznika (
caselubdefault). - Sekcja pasującego przełącznika jest definiowana przez
case: 200element, ponieważemployeeLevel = 200.
- wyrażenie przełącznika to
Zwróć uwagę, że każda sekcja przełącznika jest oddzielona od następnej.
Dozwolone jest wykonanie tylko jednej sekcji przełącznika. Oznacza to, że wykonanie sekcji przełącznika nie może zostać przekazane do następnej sekcji przełącznika. Słowo
breakkluczowe jest jednym z kilku sposobów zakończenia sekcji przełącznika przed przejściem do następnej sekcji. Jeśli zapomnisz o słowie kluczowymbreak(lub opcjonalnie słowie kluczowymreturn), kompilator wygeneruje błąd.
Zmień wartość zmiennej poziomu, aby zobaczyć, jak instrukcja switch ocenia ją
Aby przećwiczyć domyślny przypadek, zmieńmy poziom pracownika, modyfikując przypisanie wartości.
Aby zmodyfikować wartość przypisaną do
employeeLevelelementu , zaktualizuj kod w następujący sposób:int employeeLevel = 201;Zapisz plik kodu, a następnie uruchom kod przy użyciu programu Visual Studio Code.
Wprowadź
dotnet runpolecenie w wierszu polecenia terminalu, aby uruchomić kod.Zwróć uwagę, że dane wyjściowe uległy zmianie.
Teraz po uruchomieniu kodu powinien zostać wyświetlony bardziej ogólny tytuł.
John Smith, AssociatePonieważ etykieta
employeeLevelnie pasuje do żadnych etykiet, dopasowano etykietędefault.
Modyfikowanie sekcji przełącznika w celu uwzględnienia wielu etykiet
Załóżmy, że nasza firma zdecydowała się na nadanie wszystkim pracownikom 100 pracowników tytuł "Starszy współpracownik" — taki sam tytuł jak pracownicy na poziomie 200. Jako deweloper decydujesz się zaimplementować tę opcję, usuwając pierwszą sekcję przełącznika należącą do etykiety case 100:, a zamiast tego zezwalaj zarówno etykietom case 100: , jak i case 200: na wykonywanie tej samej sekcji przełącznika.
Aby zmodyfikować wartość przypisaną do
employeeLevelelementu , zaktualizuj kod w następujący sposób:int employeeLevel = 100;Aby przypisać wiele etykiet do pierwszej sekcji przełącznika, zaktualizuj kod w następujący sposób:
case 100: case 200: title = "Senior Associate"; break;Po zakończeniu wprowadzania zmian modyfikacje powinny być zgodne z następującym kodem:
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}");Zapisz plik kodu, a następnie uruchom kod przy użyciu programu Visual Studio Code.
Wprowadź
dotnet runpolecenie w wierszu polecenia terminalu, aby uruchomić kod.Powinny zostać wyświetlone następujące dane wyjściowe:
John Smith, Senior AssociateObie etykiety
100i200są teraz sparowane z sekcją instrukcji switch, która ustawia tytuł na wartość ciąguSenior Associate.
Podsumowanie
Oto najważniejsze wnioski dotyczące instrukcji switch:
- Użyj instrukcji
switch, jeśli masz jedną wartość z wieloma możliwymi dopasowaniami, z których każda wymaga gałęzi w logice kodu. - Pojedyncza sekcja przełącznika zawierająca logikę kodu może być dopasowana przy użyciu jednej lub kilku etykiet zdefiniowanych za pomocą słowa kluczowego
case. - Użyj opcjonalnego
defaultsłowa kluczowego, aby utworzyć etykietę i sekcję przełącznika, która będzie używana, gdy żadne inne etykiety przypadków nie będą zgodne.