Содержание
Оператор выбора switch в C# позволяет выбрать один из блоков кода для дальнейшего выполнения его инструкций, исходя из условия выбора. В этой части мы продолжим разбираться с тем, как мы можем внедрять в наши программы на C# логику выполнения тех или иных операций и вычислений.
Оператор выбора switch в C#
Switch — это ключевое слово в языке C#, с помощью которого мы можем создавать операторы выбора с несколькими блоками кода, где каждый блок кода создается с использованием второго ключевого слова – case.
Операторы switch в C# заменяют длинные операторы if else, которые сравнивают переменную или выражение с несколькими значениями. В общем случае, конструкция с оператором switch выглядит следующим образом:
switch (переменная)
{
case Значение_1:
Действия;
break (goto, return);
case Значение_2:
Действия;
break (goto, return);
case Значение_2:
Действия;
break (goto, return);
default:
Действие_по_умолчанию;
break;
}
После ключевого слова switch в круглых скобках указывается переменная, которая будет сравниваться со значениями (напротив ключевого слова case) и в зависимости от результата сравнения будет выполняться действия из того или иного блока кода. Если же не одно значение переменной не подойдет ни под один , то выполнится блок по умолчанию, который определяется с помощью ключевого слова casedefault . Действие по умолчанию является необязательным и может отсутствовать.
В конце каждого блока case устанавливается один из операторов перехода: или break, goto, returnthrow. Наиболее часто при этом используется break — прервать дальнейшее выполнение действие в блоках case. С операторами returnи throwмы тоже познакомимся, когда будем обладать достаточными знаниями для их использования. А пока разберемся с работой оператора switch.
Когда использовать оператор switch?
Если есть несколько вариантов и нам нужно выбрать только один из доступных вариантов в зависимости от одного условия, то нам нужно использовать оператор switch. В зависимости от выбранного варианта может быть выполнена определённая задача.
Например, рассмотрим такую задачу: задать любо целое число. Если число находится в диапазоне от 1 до 7, то вывести в консоль сообщение “*число* – это *день недели, которому соответствует число*”, например, “1 – это понедельник”.
Если использовать условный оператор if else, то код программы будет трудно читаем. Убедитесь в этом сами – попробуйте решить эту задачу, используя только оператор if..else, а потом сравните полученный код с кодом, представленным ниже:
int a = 5;
switch (a)
{
case 1:
{
Console.WriteLine($"{a} - это Понедельник");
break;
}
case 2:
{
Console.WriteLine($"{a} - это Вторник");
break;
}
case 3:
{
Console.WriteLine($"{a} - это Среда");
break;
}
case 4:
{
Console.WriteLine($"{a} - это Четверг");
break;
}
case 5:
{
Console.WriteLine($"{a} - это Пятница");
break;
}
case 6:
{
Console.WriteLine($"{a} - это Суббота");
break;
}
case 7:
{
Console.WriteLine($"{a} - это Воскресенье");
break;
}
default:
{
Console.WriteLine($"{a} - это просто число");
break;
}
}
здесь мы сразу видим какой из блоков кода будет выполняться при a = 5.

Оператор выбора switch в C#: варианты использования
Оператор switchв C# достаточно мощный и его можно использовать в различных вариациях. Рассмотрим вариант использования оператора выбора на нескольких примерах.
Пример №1 – объединение блоков кода
int a = 5;
switch (a)
{
case 1:
case 2:
case 3:
case 4:
case 5:
{
Console.WriteLine($"{a} - это номер рабочего дня недели");
break;
}
case 6:
case 7:
{
Console.WriteLine($"{a} - это номер выходного дня недели");
break;
}
default:
{
Console.WriteLine($"{a} - это просто число");
break;
}
}
Внутри каждого блока мы должны использовать break, чтобы выйти из оператора и продолжить выполнение программы. Однако, мы можем объединять несколько вариантов выбора одним блоком кода, как это показано выше. Здесь мы объединяем 5 вариантов (от 1 до 5) одним блоком кода и 2 варианта (6 и 7) вторым блоком. В результате в консоли мы увидим:

Пример №2 – переход с помощью оператора goto
int a = 5;
switch (a)
{
case 1:
case 2:
case 3:
case 4:
case 5:
{
Console.WriteLine($"{a} - это номер рабочего дня недели, ");
goto default;
}
case 6:
case 7:
{
Console.WriteLine($"{a} - это номер выходного дня недели");
break;
}
default:
{
Console.WriteLine($"вот такие дела");
break;
}
}
Обратите внимание на первый блок кода:
{
Console.WriteLine($"{a} - это номер рабочего дня недели, ");
goto default;
}
здесь мы используем оператор перехода:
goto default;
то есть, после того, как выполнится основной блок кода, мы не прервем выполнение оператора, а сначала перейдем в ветку default, выполним её инструкции и только потом завершим выполнение оператора. В приложении мы увидим:

Пример №3 – использование различных типов данных в switch
Оператор switch может работать с различными типами данных. Например,
Console.Write("Напишите название языка программирования: ");
string language = Console.ReadLine();
switch (language)
{
case "C#":
{
Console.WriteLine("C# - лучше всех!");
break;
}
case "C++":
{
Console.WriteLine("C++ - отличный выбор!");
break;
}
case "Java":
{
Console.WriteLine("Java, конечно, хорошо, но ");
goto case "C#";
}
default:
{
Console.WriteLine("Все языки программирования хорошие, если разобраться");
break;
}
}
Здесь мы в качестве переменной для выбора используем переменную с типом stringи используем различные значения строк в том числе и для перехода с помощью оператора goto
Оператор switch также может работать:
- с примитивными типами:
bool, char, и т.д. - с перечислениями
- строками
В нашем примере вывод в консоль может быть таким:
Выражение switch
Начиная с версии C# 8.0 в языке появилось выражение switch. Выражения switch позволяют упростить код, который должен возвращать какое-либо значение. Чтобы было более понятно в чём суть введения в язык нового элемента, рассмотрим следующий пример:
int dayOfWeek = 7;
string day = dayOfWeek switch
{
1 => "Понедельник",
2 => "Вторник",
3 => "Среда",
4 => "Четверг",
5 => "Пятница",
6 => "Суббота",
7 => "Воскресенье",
_ => "Что ты наделал?!",
};
Console.WriteLine(day);
Первое, на что необходимо обратить внимание – это на то, что выражение возвращает какой-либо результат, в то время как оператор может не возвращать ничего, а, как в наших примерах, просто выводить строку в консоль. Поэтому мы применяем выражение switch к переменной day.
Второе – это синтаксис выражения. Здесь мы уже не используем никаких операторов перехода и ключевых слов – все возможные варианты переменной перечисляются как есть, а блок default заменяется символом нижнего подчеркивания _.
Подведем итог
Оператор switch позволяет сократить исходный код приложение и избежать множества if..else. Оператор выбора может работать с различными типами данных, включая и строки. При этом, если нам необходимо вернуть какое-либо значение в зависимости от выбора, то можно воспользоваться выражением switch
Домашнее задание №11
Пользователь вводит с клавиатуры любой символ. Если это символы a, b или c, то необходимо вывести в консоль, соответственно, три строки “первый”, “второй”, “третий”. Если вводится другой символ, то необходимо вывести строку “Вы ввели недопустимый символ”