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:
(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})
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:
// Делать что-то
<b>goto case 2;</b>
case 2:
// Делать что-то другое
break;
case 3:
// Еще одно действие
<b> goto default;</b>