Оператор выбора switch в C# - C# и .NET

Оператор выбора switch в C#

Оператор выбора 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) и в зависимости от результата сравнения будет выполняться действия из того или иного блока кода. Если же не одно значение переменной не подойдет ни под один case, то выполнится блок по умолчанию, который определяется с помощью ключевого слова default . Действие по умолчанию является необязательным и может отсутствовать.

В конце каждого блока case устанавливается один из операторов перехода: break, goto, returnили throw. Наиболее часто при этом используется 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#: варианты использования

Оператор 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) вторым блоком. В результате в консоли мы увидим:

Оператор выбора switch в C#

Пример №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, выполним её инструкции и только потом завершим выполнение оператора. В приложении мы увидим:

Оператор выбора switch в C#

Пример №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 также может работать:

  1. с примитивными типами: bool, char, и т.д.
  2. с перечислениями
  3. строками

В нашем примере вывод в консоль может быть таким:использование различных типов данных в switch

Выражение 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, то необходимо вывести в консоль, соответственно, три строки “первый”, “второй”, “третий”. Если вводится другой символ, то необходимо вывести строку “Вы ввели недопустимый символ”