Читаем Язык программирования C#9 и платформа .NET5 полностью

Оператор switch также может применяться с перечислимым типом данных. Как будет показано в главе 4, ключевое слово enum языка C# позволяет определять специальный набор пар "имя-значение". В качестве иллюстрации рассмотрим вспомогательный метод SwitchOnEnumExample, который выполняет проверку switch для перечисления System.DayOfWeek. Пример содержит ряд синтаксических конструкций, которые пока еще не рассматривались, но сосредоточьте внимание на самом использовании switch с типом enum; недостающие фрагменты будут прояснены в последующих главах.

static 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 не разрешен, но что, если множество операторов case должны вырабатывать тот же самый результат? К счастью, их можно комбинировать, как демонстрируется ниже:

case DayOfWeek.Saturday:

case DayOfWeek.Sunday:

  Console.WriteLine("It’s the weekend!");

  break;

Помещение любого кода между операторами case приведет к тому, что компилятор сообщит об ошибке. До тех пор, пока операторы case следуют друг за другом, как показано выше, их можно комбинировать для разделения общего кода.

В дополнение к операторам return и break, показанным в предшествующих примерах кода, оператор switch также поддерживает применение goto для выхода из условия case и выполнения другого оператора case. Несмотря на наличие поддержки, данный прием почти повсеместно считается антипаттерном и в общем случае не рекомендуется. Ниже приведен пример использования оператора goto в блоке switch:

static void SwitchWithGoto

{

  var foo = 5;

  switch (foo)

  {

    case 1:

      // Делать что-то

      goto case 2;

    case 2:

      // Делать что-то другое

      break;

  case 3:

      // Еще одно действие

      goto default;

    default:

      // Стандартное действие

      break;

  }

<p id="AutBody_Root136">Выполнение сопоставления с образцом в операторах switch (нововведение в версии 7.0, обновление в версии 9.0)</p>

До выхода версии C# 7 сопоставляющие выражения в операторах switch ограничивались сравнением переменной с константными значениями, что иногда называют образцом с константами. В C# 7 операторы switch способны также задействовать образец с типами, при котором операторы case могут оценивать тип проверяемой переменной, и выражения case больше не ограничиваются константными значениями. Правило относительно того, что каждый оператор case должен завершаться с помощью return или break, по-прежнему остается в силе; тем не менее, операторы goto не поддерживают применение образца с типами.

Перейти на страницу:

Похожие книги

97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT
Программирование. Принципы и практика использования C++ Исправленное издание
Программирование. Принципы и практика использования C++ Исправленное издание

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова

Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT