Язык программирования 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.45
рейтинг книги
Старатель 2
2. Старатели
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Купеческая дочь замуж не желает
Фантастика:
фэнтези
6.89
рейтинг книги
Кодекс Охотника. Книга IX
9. Кодекс Охотника
Фантастика:
боевая фантастика
городское фэнтези
попаданцы
5.00
рейтинг книги
Школа Семи Камней
10. Real-Rpg
Фантастика:
фэнтези
рпг
5.00
рейтинг книги
Тайны ордена
6. Девятый
Фантастика:
боевая фантастика
попаданцы
7.48
рейтинг книги
Убивать чтобы жить 9
9. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Мимик нового Мира 11
10. Мимик!
Фантастика:
юмористическое фэнтези
постапокалипсис
рпг
5.00
рейтинг книги
Пришествие бога смерти. Том 5
5. Ленивое божество
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Аномальный наследник. Том 3
2. Аномальный наследник
Фантастика:
фэнтези
7.74
рейтинг книги
Опер. Девочка на спор
5. Опасная работа
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Имя нам Легион. Том 4
4. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Приручитель женщин-монстров. Том 8
8. Покемоны? Какие покемоны?
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Личник
3. Ермак
Фантастика:
альтернативная история
6.33