Оператор 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.

codechick

СodeСhick.io - простой и эффективный способ изучения программирования.

2024 ©