Чтение онлайн

на главную - закладки

Жанры

Язык программирования C#9 и платформа .NET5
Шрифт:

case "VB":

Console.WriteLine("VB: OOP, multithreading and more!");

break;

default:

Console.WriteLine("Well...good luck with that!");

break;

}

}

Оператор

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;

}

}

Выполнение сопоставления с образцом в операторах switch (нововведение в версии 7.0, обновление в версии 9.0)

До выхода версии C# 7 сопоставляющие выражения в операторах

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

На заметку! Если вы новичок в объектно-ориентированном программировании, тогда материал этого раздела может слегка сбивать с толку. Все прояснится в главе 6, когда мы вернемся к новым средствам сопоставления с образцом C# 7 в контексте базовых и производных классов. Пока вполне достаточно понимать, что появился мощный новый способ написания операторов

switch
.

Добавьте еще один метод по имени

ExecutePatternMatchingSwitch
со следующим кодом:

Поделиться:
Популярные книги

Адвокат вольного города

Парсиев Дмитрий
1. Адвокат
Фантастика:
городское фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Адвокат вольного города

Темный Лекарь 4

Токсик Саша
4. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь 4

Дракон - не подарок

Суббота Светлана
2. Королевская академия Драко
Фантастика:
фэнтези
6.74
рейтинг книги
Дракон - не подарок

Разбуди меня

Рам Янка
7. Серьёзные мальчики в форме
Любовные романы:
современные любовные романы
остросюжетные любовные романы
5.00
рейтинг книги
Разбуди меня

Изгой Проклятого Клана. Том 2

Пламенев Владимир
2. Изгой
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Изгой Проклятого Клана. Том 2

Провинциал. Книга 2

Лопарев Игорь Викторович
2. Провинциал
Фантастика:
космическая фантастика
рпг
аниме
5.00
рейтинг книги
Провинциал. Книга 2

На границе империй. Том 10. Часть 3

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 3

Сумеречный Стрелок 2

Карелин Сергей Витальевич
2. Сумеречный стрелок
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный Стрелок 2

Академия

Кондакова Анна
2. Клан Волка
Фантастика:
боевая фантастика
5.40
рейтинг книги
Академия

Попаданка для Дракона, или Жена любой ценой

Герр Ольга
Любовные романы:
любовно-фантастические романы
7.17
рейтинг книги
Попаданка для Дракона, или Жена любой ценой

Жена фаворита королевы. Посмешище двора

Семина Дия
Фантастика:
фэнтези
5.00
рейтинг книги
Жена фаворита королевы. Посмешище двора

Сердце Дракона. Том 12

Клеванский Кирилл Сергеевич
12. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.29
рейтинг книги
Сердце Дракона. Том 12

Архонт

Прокофьев Роман Юрьевич
5. Стеллар
Фантастика:
боевая фантастика
рпг
7.80
рейтинг книги
Архонт

Лучший из худших

Дашко Дмитрий
1. Лучший из худших
Фантастика:
фэнтези
попаданцы
5.25
рейтинг книги
Лучший из худших