Оператор switch в C#
В этой статье вы познакомитесь с оператором switch и научитесь им пользоваться.
Оператор switch в C# используется для замены конструкции if...else. Главное его преимущество по сравнению с if...else — чистота и удобочитаемость.
Синтаксис
switch (переменная/выражение)
{
case value1:
// Этот блок кода выполняется, если выражение (или переменная) = value1
break;
case value2:
// Этот блок кода выполняется, если выражение (или переменная) = value2
break;
... ... ...
... ... ...
default:
// Этот блок кода выполняется, если выражение (или переменная) не равно ни одному value
}
Оператор switch
принимает выражение
или переменную
и сравнивает его значение со значением каждого case (value1
, value2
, …). Когда оператор switch
находит идентичное значение, выполняется блок кода внутри соответствующего case.
Если ни одно значение case не соответствует выражению, выполняется блок кода внутри оператора default
. Оператор default
в конце switch
аналогичен блоку else
в конструкции if-else.
Когда оператор switch
находит подходящее значение, он также выполняет все нижестоящие блоки case. Это важный нюанс.
Чтобы этого избежать, нужно использовать оператор break
в конце каждого блока case
. Оператор break
завершает выполнение оператора switch
, что предотвращает выполнение несоответствующих case.
Пример 1. Используем оператор switch
using System;
namespace Conditional
{
class SwitchCase
{
public static void Main(string[] args)
{
char ch;
Console.WriteLine("Введите букву");
ch = Convert.ToChar(Console.ReadLine());
switch(Char.ToLower(ch))
{
case 'а':
Console.WriteLine("Гласная");
break;
case 'у':
Console.WriteLine("Гласная");
break;
case 'о':
Console.WriteLine("Гласная");
break;
case 'ы':
Console.WriteLine("Гласная");
break;
case 'и':
Console.WriteLine("Гласная");
break;
case 'э':
Console.WriteLine("Гласная");
break;
case 'я':
Console.WriteLine("Гласная");
break;
case 'ю':
Console.WriteLine("Гласная");
break;
case 'е':
Console.WriteLine("Гласная");
break;
case 'ё':
Console.WriteLine("Гласная");
break;
default:
Console.WriteLine("Согласная");
break;
}
}
}
}
Вывод:
Введите букву
х
Согласная
В этом примере пользователь вводит букву алфавита. Буква, если она заглавная, конвертируется в прописную с помощью метода ToLower()
.
После этого оператор switch
проверяет букву, которую ввел пользователь, на соответствие а
, у
, о
, ы
, и
, э
, я
, ю
, ё
или е
.
Если введенная буква соответствует какому-либо case, программа выводит сообщние «Гласная». Если нет — управление переходит к оператору default
, и тогда программа печатает сообщение «Согласная».
Блоки кода всех case с гласными буквами одинаковые, так что мы можем их объединить.
Пример 2. Используем оператор switch с сгруппированными case
using System;
namespace Conditional
{
class SwitchCase
{
public static void Main(string[] args)
{
char ch;
Console.WriteLine("Введите букву");
ch = Convert.ToChar(Console.ReadLine());
switch(Char.ToLower(ch))
{
case 'а':
case 'у':
case 'о':
case 'ы':
case 'и':
case 'э':
case 'я':
case 'ю':
case 'е':
case 'ё':
Console.WriteLine("Гласная");
break;
default:
Console.WriteLine("Согласная");
break;
}
}
}
}
Вывод будет таким же, как и у программы выше. В программе выше все case с гласными буквами печатали «Гласная» и завершали выполнение оператора switch
.
Хоть оператор switch
и делает код более читаемым, но у него есть ограничения. Он работает только со следующими типами данных:
- примитивные типы данных: bool, char, целые числа;
- перечисляемые типы данных (Enum);
- строки;
- nullable-типы.
Пример 3. Пишем простейший калькулятор, основанный на switch
using System;
namespace Conditional
{
class SwitchCase
{
public static void Main(string[] args)
{
char op;
double first, second, result;
Console.Write("Введите первое число: ");
first = Convert.ToDouble(Console.ReadLine());
Console.Write("Введите второе число: ");
second = Convert.ToDouble(Console.ReadLine());
Console.Write("Введите оператор (+, -, *, /): ");
op = (char)Console.Read();
switch(op)
{
case '+':
result = first + second;
Console.WriteLine("{0} + {1} = {2}", first, second, result);
break;
case '-':
result = first - second;
Console.WriteLine("{0} - {1} = {2}", first, second, result);
break;
case '*':
result = first * second;
Console.WriteLine("{0} * {1} = {2}", first, second, result);
break;
case '/':
result = first / second;
Console.WriteLine("{0} / {1} = {2}", first, second, result);
break;
default:
Console.WriteLine("Недопустимый оператор");
break;
}
}
}
}
Вывод:
Введите первое число: -13.11
Введите второе число: 2.41
Введите оператор (+, -, *, /): *
-13.11 * 2.41 = -31.5951
Эта программа принимает два операнда и оператор, которые вводит пользователь. Затем она производит операцию, которая зависит от введенного оператора.
Ввод данных осуществляется с помощью методов ReadLine()
и Read()
.
Для выбора нужного оператора программа использует оператор switch
. То же самое можно реализовать и с помощью оператора if-else.