English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C# Уровень начинающий

C# Уровень продвинутый

C# Ориентированный на объекты (OOP)

Условное предложение Switch в C#

Когда необходимо проверять переменную по трем или более условиям, можно использовать оператор switch вместо оператора if else. Здесь вы узнаете о операторе switch и о том, как эффективно использовать его в программах на C#.

Ниже приведен общий синтаксис оператора switch.

 Синтаксис:

switch(match expression/variable)
{
    case constant-value:
        //Инструкции для выполнения;
        break;
    default: 
        //Инструкции для выполнения;
        break;
}

Оператор switch начинается с ключевого слова switch, которое содержит выражение или переменную в скобках switch(выражение match expression). Результат этого выражения или переменной будет проверен по условиям case, указанным внутри фигурных скобок {}. Case должны быть определены уникальными константными значениями и заканчиваться точкой с запятой:. Каждое состояние включает один или несколько инструкций для выполнения. Если константное значение равно значению выражения или переменной, то выполняется case. Оператор switch также может содержать опциональный тег default. Если ни один из case не был выполнен, то выполняется тег default. Ключевые слова break, return или goto используются для выхода из situations в switch.

Ниже приведен пример использования простого оператора switch.

int x = 10;
switch (x)
{ 
    case 5:
        Console.WriteLine("Значение x равно 5");
        break;
    case 10:
        Console.WriteLine("Значение x равно 10");
        break;
    case 15:
        Console.WriteLine("Значение x равно 15");
        break;
    default:
        Console.WriteLine("Неизвестное значение");
        break;
}
Результат:
Значение x равно 10

В upper, оператор switch (x) содержит переменную x, значение которой будет сравниваться со каждым case Значение значения совпадает. В upper switch оператор содержится три случая константных значений 5, 10 и 15. Он также содержит метку default, если ни один из значений case не совпадает с switch Соответствие переменной/выражению, выполняется этот метка. Каждый case начинается с : после и содержит инструкцию для выполнения. Значение X совпадает с значением второго случая 10: Соответствие, поэтому значение вывода - это значение x, равное 10.

Оператор switch может содержать любое выражение, не возвращающее значение null, которое возвращает тип char, string, bool, int или enum.

Оператор switch может также содержать выражение, результат которого будет проверен для каждого case в момент выполнения.

int x = 125;
switch (x % 2)
{ 
    case 0:
        Console.WriteLine($"{x} - четное число");
        break;
    case 1:
        Console.WriteLine($"{x} - нечетное число");
        break;
}
Результат:
125 - нечетное число

Case switch

Case switch должен быть уникальным константным значением. Это может быть bool, char, string, integer, enum или соответствующий可为 null тип.

Внимание

С версии C# 7.0 switch case может содержать неуникальные значения. В этом случае будет выполнен первый соответствующий case.

Рассмотрим следующий простой пример switch оператора.

string statementType = "switch";
switch (statementType)
{
    case "if.else":
        Console.WriteLine("if...else оператор");
        break;
    case "ternary":
        Console.WriteLine("Тернарный оператор");
        break;
    case "switch":
        Console.WriteLine("switch оператор");
        break;
}
Результат:
switch оператор

Множественные case могут быть объединены для выполнения одинаковых инструкций.

int x = 5;
switch (x)
{ 
    case 1:
        Console.WriteLine("x = 1");
        break;
    case 2:
        Console.WriteLine("x = 2");
        break;
    case 4:
    case 5:
        Console.WriteLine("x = 4 or x = 5");
        break;
    default:
        Console.WriteLine("x > 5");
        break;
}

Каждый case должен явно выходить из него с помощью оператора break, return, goto или другого способа, чтобы обеспечить выход из case и предотвращение перехода в случай по умолчанию.

Ниже используется ключевое слово return.

static void Main(string[] args)
{
    int x = 125;
    Console.Write(isOdd(x) ? "Even Value" : "Odd Value");
}
static bool isOdd(int i, int j)
{
    switch (x % 2)
    { 
        case 0:
            return true;
        case 1:
            return false;
        default:
            return false;
    }
    
    return false;
}
Результат:
Нечетные значения

Отсутствие операторов break, return или goto, или определение switch case с одинаковыми константами, приведет к ошибке компиляции.

int x = 1;
switch (x)
{ 
    case 0:
        Console.WriteLine($"{x} even value");
        break;
    case 1:
        Console.WriteLine($"{x} odd Value");
        break;
    case 1: // Ошибка - контроллер не может перейти от одного тега case ("case 1:") к другому тегу case
        Console.WriteLine($"{x} odd Value");
    defaut:
        Console.WriteLine($"{x} odd Value");
        break;
}

Нахождение switch-определений

Одно определение switch может быть использовано в другом определении switch.

int j = 5;
switch (j)
{
    case 5:
        Console.WriteLine(5);
        switch (j - 1)
        {
            case 4:
            Console.WriteLine(4);
            switch (j - 2)
            {
                case 3:
                Console.WriteLine(3);
                break;
            }
            break;
        }
        break;
    case 10:
        Console.WriteLine(10);
        break;
    case 15:
        Console.WriteLine(15);
        break;
    default:
        Console.WriteLine(100);
        break;
}
Результат:
5 
4 
3
 Основные要点, которые нужно запомнить:
  1. switch-условие является альтернативой if-else-условиям.

  2. switch-условие выполняет тест на соответствие выражению/переменной, указанной для case.

  3. Чтобы выйти из случая case, в switch-условии должны быть включены ключевые слова break, return или goto.

  4. switch может содержать опциональный тег default, который будет выполнен, если не выполняется ни одно из условий case.

  5. Компилятор C# выдаст ошибку о пропущенном : в случае и о постоянной значении, и выйдет из случая.

  6. С C# 7.0 switch-условие может содержать неуникальные значения. В этом случае будет выполнено первое соответствующее условие.