Освоение оператора switch в C#: синтаксис, примеры и лучшие практики
Оператор switch в C#
Узнайте, как заменять сложные цепочки if-else на чистый, читаемый switch — с практическими примерами.
Switch упрощает принятие решений, вычисляя одно выражение и выполняя соответствующий блок case. По сравнению с длинной лестницей if-else, синтаксис switch лаконичнее и проще в поддержке.
Базовая структура:
switch (variableOrExpression) {
case value1:
// Код для value1
break;
case value2:
// Код для value2
break;
// …
default:
// Код, если ни один case не совпал
}
При совпадении выполняется соответствующий блок до break, завершающего switch. Если совпадений нет — выполняется default, аналогично else.
Без break выполнение «проваливается» в последующие case — частая причина багов. Подробнее о break см. документацию.
Пример 1: Определение гласных
using System;
namespace Conditional {
class SwitchCase {
public static void Main(string[] args) {
char ch;
Console.WriteLine("Enter an alphabet");
ch = Convert.ToChar(Console.ReadLine());
switch(Char.ToLower(ch)) {
case 'a': Console.WriteLine("Vowel"); break;
case 'e': Console.WriteLine("Vowel"); break;
case 'i': Console.WriteLine("Vowel"); break;
case 'o': Console.WriteLine("Vowel"); break;
case 'u': Console.WriteLine("Vowel"); break;
default: Console.WriteLine("Not a vowel"); break;
}
}
}
}
Результат:
Enter an alphabet X Not a vowel
Ввод приводится к нижнему регистру и сравнивается с гласными. Если нет совпадения — default.
Так как все гласные делают одно действие, их можно сгруппировать:
Пример 2: Группировка case
using System;
namespace Conditional {
class SwitchCase {
public static void Main(string[] args) {
char ch;
Console.WriteLine("Enter an alphabet");
ch = Convert.ToChar(Console.ReadLine());
switch(Char.ToLower(ch)) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
Console.WriteLine("Vowel");
break;
default:
Console.WriteLine("Not a vowel");
break;
}
}
}
}
Вывод тот же, но код чище.
Switch работает с ограниченным набором типов:
- Примитивы (bool, char, целые)
- Перечисления (enum)
- String
- Nullable-версии вышеуказанных
Пример 3: Простой калькулятор
using System;
namespace Conditional {
class SwitchCase {
public static void Main(string[] args) {
char op;
double first, second, result;
Console.Write("Enter first number: ");
first = Convert.ToDouble(Console.ReadLine());
Console.Write("Enter second number: ");
second = Convert.ToDouble(Console.ReadLine());
Console.Write("Enter operator (+, -, *, /): ");
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("Invalid Operator"); break;
}
}
}
}
Пример запуска:
Enter first number: -13.11 Enter second number: 2.41 Enter operator (+, -, *, /): * -13.11 * 2.41 = -31.5951
Калькулятор принимает два операнда и оператор, выполняет операцию через switch. Ввод через ReadLine() и Read(); подробнее о вводе-выводе см. C# Basic Input and Output.
Хотя if-else мог бы заменить switch, последний дает более явный код и быстрее для дискретных значений.
Язык C
- Цепь с переключателем: практическое руководство по базовым электрическим цепям
- Эксперимент с коммутирующим диодом: Подавление индуктивного отбоя неоновой лампой
- Понимание электрических коммутаторов: типы, функции и применения
- Устранение дребезга контактов механических коммутаторов
- Мультиметры: от аналоговых к цифровым — полное руководство
- Оператор break в C#: как и когда использовать
- Оператор continue в C#: как эффективно пропускать итерации циклов
- Оператор pass в Python: практическое руководство
- Оператор switch-case в C++: синтаксис, применение и практические примеры
- Базовый синтаксис C: токены, идентификаторы, ключевые слова и пробелы