Язык программирования 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
рейтинг книги
На Ларэде
3. Лэрн
Фантастика:
фэнтези
героическая фантастика
стимпанк
5.00
рейтинг книги
Охота на попаданку. Бракованная жена
Любовные романы:
любовно-фантастические романы
5.60
рейтинг книги
Кай из рода красных драконов
1. Красная кость
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Хозяйка Проклятой Пустоши. Книга 2
2. Хозяйка Проклятой Пустоши
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Безумный Макс. Поручик Империи
1. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
7.64
рейтинг книги
Потусторонний. Книга 2
2. Господин Артемьев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Чапаев и пустота
Проза:
современная проза
8.39
рейтинг книги
Солнечный корт
4. Все ради игры
Фантастика:
зарубежная фантастика
5.00
рейтинг книги
Лютая
Любовные романы:
любовно-фантастические романы
6.40
рейтинг книги
Ведьмак (большой сборник)
Ведьмак
Фантастика:
фэнтези
9.29
рейтинг книги
Наследие Маозари 4
4. Наследие Маозари
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ученик
1. Тай Фун
Фантастика:
фэнтези
5.00
рейтинг книги
Начальник милиции. Книга 5
5. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00