Упражнение. Реализация инструкции switch
- 11 минут
Оператор switch — это оператор выбора C#, который предоставляет альтернативу if-elseif-else конструкции ветвления. Оператор switch предоставляет преимущества по сравнению с конструкцией if-elseif-else при оценке одного значения со списком известных совпадающих значений.
Рассмотрим следующий сценарий:
- Вы работаете над приложением, связанным с питанием пищи. В разделе кода рассматриваются фрукты.
- Код содержит переменную с именем
fruit, которая используется для хранения имени различных типов фруктов. - У вас есть список 20 фруктов, на которые ориентировано ваше приложение.
- Вы хотите сделать ветвление вашего кода на основании присвоенного значения
fruit.
В этом сценарии можно использовать switch инструкцию для создания отдельной ветви для каждого типа фруктов.
Как работает оператор switch?
Оператор switch выбирает одну секцию кода для выполнения из списка возможных секций переключателя. Выбранный раздел переключателя выбирается на основе сопоставления шаблона с выражением соответствия инструкции.
Рассмотрим следующий пример кода, показывающий базовую структуру инструкции 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;
}
Выражение сопоставления (которое также может называться выражением switch) — это значение, следующее за ключевым словом switch, в данном случае (fruit). Каждый раздел переключателя определяется шаблоном случая. Шаблоны вариантов создаются с помощью ключевого слова case, за которым следует значение. Первый шаблон регистра в этом примере : case "apple":. Шаблоны регистра — логические выражения, которые оцениваются либо в true, либо в false. Каждый раздел коммутатора содержит небольшое количество строк кода, которые будут выполняться, если шаблон случая совпадает с выражением совпадения. В этом примере, если fruit присвоено значение "apple", первый шаблон будет оцениваться как true, и этот участок switch будет выполнен.
Оператор switch должен содержать по крайней мере один раздел коммутатора, но обычно содержит три или более разделов коммутатора.
Этот переключатель лучше всего использовать, когда:
- У вас есть одно значение (переменная или выражение), которое требуется сопоставить со многими возможными значениями.
- Для любого заданного совпадения необходимо выполнить несколько строк кода в большинстве случаев.
Замечание
Этот первый пример инструкции switch является намеренно простым, и ваш анализ синтаксиса был кратким. При работе с более сложными сценариями в нижеследующих разделах вы ознакомитесь с дополнительными возможностями инструкции switch.
Пришло время подготовить среду программирования и начать разработку собственных switch инструкций.
Подготовка среды программирования
Этот модуль включает практические действия, которые помогут вам в процессе создания и выполнения демонстрационного кода. Мы рекомендуем выполнить эти действия с помощью Visual Studio Code в качестве среды разработки. Использование Visual Studio Code для выполнения этих задач поможет вам стать более уверенным в написании и выполнении кода в среде разработки, которая используется профессионалами по всему миру.
Откройте Visual Studio Code.
Для открытия Visual Studio Code можно использовать меню Windows (или эквивалентный ресурс для другой ОС).
В меню Visual Studio Code "Файл" выберите "Открыть папку".
В диалоговом окне "Открыть папку " перейдите в папку "Рабочий стол Windows".
Если у вас есть другое расположение папки, в котором хранятся проекты кода, вместо этого можно использовать это расположение папки. Для этого обучения важно иметь расположение, которое легко найти и помнить.
В диалоговом окне "Открыть папку" выберите "Выбрать папку".
Если появится диалоговое окно безопасности с запросом доверия авторам, нажмите кнопку "Да".
В меню Visual Studio Code Терминал выберите Новый терминал.
Обратите внимание, что в командной строке на панели терминала отображается путь текущей папки. Рассмотрим пример.
C:\Users\someuser\Desktop>Замечание
Если вы работаете на собственном компьютере, а не в песочнице или размещенной среде, и вы выполнили другие модули Microsoft Learn в этой серии C#, возможно, вы уже создали папку проекта для примеров кода. Если это так, можно пропустить следующий шаг, который используется для создания консольного приложения в папке TestProject.
В командной строке терминала, чтобы создать консольное приложение в указанной папке, введите следующую строку:
dotnet new console -o ./CsharpProjects/TestProjectЭта команда .NET CLI использует шаблон программы .NET для создания проекта консольного приложения C# в указанном расположении папки. Команда создает для вас папки CsharpProjects и TestProject и использует TestProject в качестве имени вашего файла
.csproj.Если отображается сообщение о том, что файлы уже существуют, перейдите к следующим шагам. Вы повторно используете существующие файлы проекта.
В представлении EXPLORER разверните папку CsharpProjects .
Вы увидите папку TestProject и два файла, файл программы C# с именем Program.cs и файл проекта C# с именем TestProject.csproj.
В меню Visual Studio Code "Файл" выберите "Открыть папку".
В диалоговом окне "Открыть папку " выберите папку CsharpProjects и выберите "Выбрать папку".
В представлении EXPLORER разверните папку TestProject и выберите Program.cs.
Удалите существующие строки кода.
Вы будете использовать этот консольный проект C# для создания, сборки и запуска примеров кода во время этого модуля.
Закройте панель терминала.
Создание и проверка инструкции switch
Убедитесь, что у вас открыт Visual Studio Code и в панели редактора отображается файл Program.cs.
Замечание
Program.cs должно быть пустым. Если это не так, выберите и удалите все строки кода.
Введите следующий код в редактор 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}");В меню Файл в Visual Studio Code выберите Сохранить.
Перед созданием или выполнением кода необходимо сохранить файл Program.cs.
На панели обозревателя откройте терминал в папке TestProject, щелкните правой кнопкой мыши TestProject и выберите "Открыть в интегрированном терминале".
Откроется панель терминала. Терминал должен содержать командную строку, показывающую, что терминал открыт для расположения папки TestProject.
В командной строке терминала, чтобы запустить код, введите команду dotnet run и нажмите клавишу Enter.
Замечание
Если появится сообщение "Не удалось найти проект для запуска", убедитесь, что в командной строке терминала отображается ожидаемое расположение папки TestProject. Например:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Вы увидите следующие выходные данные:
John Smith, Senior AssociateПотратьте минуту на просмотр введенного
switchзаявления.Обратите внимание, что инструкция
switchопределяет один блок кода.Инструкция
switchопределяет один блок кода, содержащий список разделов коммутатора. Справа от ключевого словаswitch— выражение switch, заключенное в скобки.Обратите внимание на список разделов коммутатора в блоке кода.
Блок
switchкода содержит список разделов коммутаторов, каждый из которых включает одну или несколько меток коммутаторов. Кроме того, каждый раздел switch содержит список инструкций, который будет выполняться, если метка равна выражению switch, определенному в начале инструкции switch.Выражение switch оценивается по меткам case сверху вниз до тех пор, пока не будет найдено совпадающее значение, равное switch-выражению. Если ни одна из меток не соответствует, список инструкций для случая
defaultбудет выполнен. Если значение по умолчанию не включено, элемент управления передается в конечную точку инструкции switch. Каждая метка должна предоставить тип значения, соответствующий типу, указанному в выражении коммутатора.Замечание
Необязательная
defaultметка может отображаться в любой позиции в списке разделов коммутатора. Тем не менее, большинство разработчиков выбирают ставить его последним, так как логически более обоснованно позиционироватьdefaultв качестве финального варианта. Независимо от позиции,defaultраздел будет оцениваться последним.В нашем примере:
- Выражение переключателя равно
(employeeLevel) - каждый раздел коммутатора имеет единственную метку коммутатора (
caseилиdefault). - Секция соответствующего переключателя определяется
case: 200, так какemployeeLevel = 200.
- Выражение переключателя равно
Обратите внимание, что каждый раздел коммутатора отделен от следующего.
Допускается выполнение только одного раздела коммутатора. Это означает, что выполнение раздела коммутатора не допускается "переходить" к следующему разделу коммутатора. Ключевое
breakслово является одним из нескольких способов завершения раздела переключателя перед переходом к следующему разделу. Если вы забыли ключевое словоbreak(или, возможно, ключевое словоreturn), компилятор выдаст ошибку.
Измените значение переменной уровня, чтобы увидеть, как оператор switch обрабатывает его.
Чтобы выполнить вариант по умолчанию, давайте изменим уровень сотрудника, изменив назначение значения.
Чтобы изменить назначенное
employeeLevelзначение, обновите код следующим образом:int employeeLevel = 201;Сохраните файл кода и используйте Visual Studio Code для запуска кода.
Введите
dotnet runиз командной строки терминала, чтобы запустить код.Обратите внимание, что выходные данные изменились.
Теперь при запуске кода вы увидите более универсальный заголовок.
John Smith, AssociateПоскольку
employeeLevelне соответствует ни одной метке, сопоставляется меткаdefault.
Измените раздел переключателя, чтобы включить несколько ярлыков
Предположим, наша компания решила дать всем сотрудникам уровня 100 название "Старший помощник" - тот же титул, что и уровень 200 сотрудников. В качестве разработчика вы решили реализовать это, удалив первый раздел коммутатора, принадлежащий метке case 100:, и вместо этого разрешить меткам case 100: и case 200: выполнять один и тот же раздел коммутатора.
Чтобы изменить назначенное
employeeLevelзначение, обновите код следующим образом:int employeeLevel = 100;Чтобы назначить несколько меток первому разделу коммутатора, обновите код следующим образом:
case 100: case 200: title = "Senior Associate"; break;По завершении внесения изменений изменения должны соответствовать следующему коду:
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}");Сохраните файл кода и используйте Visual Studio Code для запуска кода.
Введите
dotnet runиз командной строки терминала, чтобы запустить код.Вы увидите следующие выходные данные:
John Smith, Senior AssociateОбе метки
100и200теперь относятся к секции переключателя, которая устанавливает заголовок на строковое значениеSenior Associate.
Обзор
Вот основные выносы, которые вы узнали об инструкции switch:
- Используйте инструкцию
switch, если у вас есть одно значение с множеством возможных совпадений, и каждое совпадение требует ветви в логике кода. - Один раздел коммутатора, содержащий логику кода, можно сопоставить с помощью одной или нескольких меток, определенных ключевым словом
case. - Используйте необязательное ключевое слово
defaultдля создания метки и секции переключателя, которая будет использоваться, когда другие метки case не совпадают.