Язык программирования C#9 и платформа .NET5
Часть 73 из 642 Информация о книге
case "VB":Console.WriteLine("VB: OOP, multithreading and more!");break;default:Console.WriteLine("Well...good luck with that!");break;}}Оператор
также может применяться с перечислимым типом данных. Как будет показано в главе 4, ключевое словоswitchязыка C# позволяет определять специальный набор пар "имя-значение". В качестве иллюстрации рассмотрим вспомогательный методenum, который выполняет проверкуSwitchOnEnumExample()для перечисленияswitch. Пример содержит ряд синтаксических конструкций, которые пока еще не рассматривались, но сосредоточьте внимание на самом использованииSystem.DayOfWeekс типомswitch; недостающие фрагменты будут прояснены в последующих главах.enumstatic void SwitchOnEnumExample(){Console.Write("Enter your favorite day of the week: ");// Введите любимый день недели:DayOfWeek favDay;try{favDay = (DayOfWeek) Enum.Parse(typeof(DayOfWeek), Console.ReadLine());}catch (Exception){Console.WriteLine("Bad input!");// Недопустимое входное значение!return;}switch (favDay){case DayOfWeek.Sunday:Console.WriteLine("Football!!");// Футбол! !break;case DayOfWeek.Monday:Console.WriteLine("Another day, another dollar");// Еще один день, еще один доллар.break;case DayOfWeek.Tuesday:Console.WriteLine("At least it is not Monday");// Во всяком случае, не понедельник.break;case DayOfWeek.Wednesday:Console.WriteLine("A fine day.");// Хороший денек.break;case DayOfWeek.Thursday:Console.WriteLine("Almost Friday...");// Почти пятница...break;case DayOfWeek.Friday:Console.WriteLine("Yes, Friday rules!");// Да, пятница рулит!break;case DayOfWeek.Saturday:Console.WriteLine("Great day indeed.");// Действительно великолепный день.break;}Console.WriteLine();}Сквозной проход от одного оператора
к другому операторуcaseне разрешен, но что, если множество операторовcaseдолжны вырабатывать тот же самый результат? К счастью, их можно комбинировать, как демонстрируется ниже:casecase DayOfWeek.Saturday:case DayOfWeek.Sunday:Console.WriteLine("It’s the weekend!");break;Помещение любого кода между операторами
приведет к тому, что компилятор сообщит об ошибке. До тех пор, пока операторы case следуют друг за другом, как показано выше, их можно комбинировать для разделения общего кода.caseВ дополнение к операторам
иreturn, показанным в предшествующих примерах кода, операторbreakтакже поддерживает применениеswitchдля выхода из условияgotoи выполнения другого оператораcase. Несмотря на наличие поддержки, данный прием почти повсеместно считается антипаттерном и в общем случае не рекомендуется. Ниже приведен пример использования оператораcaseв блокеgoto:switchstatic void SwitchWithGoto(){var foo = 5;switch (foo){case 1:// Делать что-то<b>goto case 2;</b>case 2:// Делать что-то другоеbreak;case 3:// Еще одно действие<b> goto default;</b>