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

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

Жанры

Язык программирования 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
со следующим кодом:

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

Газлайтер. Том 8

Володин Григорий
8. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 8

На Ларэде

Кронос Александр
3. Лэрн
Фантастика:
фэнтези
героическая фантастика
стимпанк
5.00
рейтинг книги
На Ларэде

Охота на попаданку. Бракованная жена

Герр Ольга
Любовные романы:
любовно-фантастические романы
5.60
рейтинг книги
Охота на попаданку. Бракованная жена

Кай из рода красных драконов

Бэд Кристиан
1. Красная кость
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Кай из рода красных драконов

Хозяйка Проклятой Пустоши. Книга 2

Белецкая Наталья
2. Хозяйка Проклятой Пустоши
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Хозяйка Проклятой Пустоши. Книга 2

Безумный Макс. Поручик Империи

Ланцов Михаил Алексеевич
1. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
7.64
рейтинг книги
Безумный Макс. Поручик Империи

Потусторонний. Книга 2

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

Чапаев и пустота

Пелевин Виктор Олегович
Проза:
современная проза
8.39
рейтинг книги
Чапаев и пустота

Солнечный корт

Сакавич Нора
4. Все ради игры
Фантастика:
зарубежная фантастика
5.00
рейтинг книги
Солнечный корт

Лютая

Шёпот Светлана Богдановна
Любовные романы:
любовно-фантастические романы
6.40
рейтинг книги
Лютая

Ведьмак (большой сборник)

Сапковский Анджей
Ведьмак
Фантастика:
фэнтези
9.29
рейтинг книги
Ведьмак (большой сборник)

Наследие Маозари 4

Панежин Евгений
4. Наследие Маозари
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Наследие Маозари 4

Ученик

Губарев Алексей
1. Тай Фун
Фантастика:
фэнтези
5.00
рейтинг книги
Ученик

Начальник милиции. Книга 5

Дамиров Рафаэль
5. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции. Книга 5