C# - Главная Пространство имен
► System ► Microsoft Для учеников (начинающих)
► Видео уроки ► Обучение ► Примеры программ ► Секреты в Си Шарп Для профессионалов
► Обучение ► Примеры программ ► Задачки - для тебя! |
Оператор switch C#
Частным, но важным случаем выбора из нескольких вариантов является ситуация, при которой выбор варианта определяется значениями некоторого выражения. Соответствующий оператор C#, унаследованный от C++, но с небольшими изменениями в синтаксисе, называется оператором switch. Вот его синтаксис:
switch(выражение) { case константное_выражение_1: [операторы_1 оператор_перехода_1] ... case константное_выражение_K: [операторы_K оператор_перехода_K] [default: операторы_N оператор_перехода_N] }
Вначале вычисляется значение switch-выражения. Затем оно поочередно в порядке следования case сравнивается на совпадение с константными выражениями. Как только достигнуто совпадение, выполняется соответствующая последовательность операторов case-ветви. Поскольку последний оператор этой последовательности является оператором перехода (чаще всего это оператор break), то обычно он завершает выполнение оператора switch. Использование операторов перехода - это плохая идея. Таким оператором может быть оператор goto, передающий управление другой case-ветви, которая, в свою очередь, может передать управление еще куда-нибудь, получая блюдо "спагетти" вместо хорошо структурированной последовательности операторов. Семантика осложняется еще и тем, что case-ветвь может быть пустой последовательностью операторов. Тогда в случае совпадения константного выражения этой ветви со значением switch-выражения будет выполняться первая непустая последовательность очередной case-ветви. Если значение switch-выражения не совпадает ни с одним константным выражением, то выполняется последовательность операторов ветви default, если же таковой ветви нет, то оператор switch эквивалентен пустому оператору.
Когда разбор случаев предполагает проверку попадания в некоторый диапазон значений, приходится прибегать к оператору if для формирования специальной переменной. Этот прием демонстрируется в следующем примере:
/// <summary> /// Определяет период в зависимости от возраста - age /// Использование ветвящегося оператора if /// </summary> public void SetPeriod() { if ((age > 0)&& (age <7))period=1; else if ((age >= 7)&& (age <17))period=2; else if ((age >= 17)&& (age <22))period=3; else if ((age >= 22)&& (age <27))period=4; else if ((age >= 27)&& (age <37))period=5; else period =6; }
Этот пример демонстрирует применение ветвящегося оператора if.
/// <summary> /// Определяет статус в зависимости от периода - period /// Использование разбора случаев - оператора Switch /// </summary> public void SetStatus() { switch (period) { case 1: status = "child"; break; case 2: status = "schoolboy"; break; case 3: status = "student"; break; case 4: status = "junior researcher"; break; case 5: status = "senior researcher"; break; case 6: status = "professor"; break; default : status = "не определен"; break; } Console.WriteLine("Имя = {0}, Возраст = {1}, Статус = {2}", name, age, status); }//SetStatus
Этот пример демонстрирует корректный стиль использования оператора switch.
Просмотров: 16251 |