Как видите, последний оператор else выполняется лишь в том случае, если не удается выполнить ни один из предыдущих операторов.
Оператор switch
Вторым оператором выбора в C# является оператор switch, который обеспечивает многонаправленное ветвление программы. Следовательно, этот оператор позволяет сделать выбор среди нескольких альтернативных вариантов дальнейшего выполнения программы. Несмотря на то что многонаправленная проверка может быть организована с помощью последовательного ряда вложенных операторов if, во многих случаях более эффективным оказывается применение оператора switch. Этот оператор действует следующим образом. Значение выражения последовательно сравнивается с константами выбора из заданного списка. Как только будет обнаружено совпадение с одним из условий выбора, выполняется последовательность операторов, связанных с этим условием. Ниже приведена общая форма оператора switch.
switch (выражение) { case константа1:
последовательность операторов break; case константа2:
последовательность операторов break; case константаЗ:
последовательность операторов break;
default:
последовательность операторов break;
}
Заданное выражение в операторе switch должно быть целочисленного типа (char, byte, short или int), перечислимого или же строкового. (О перечислениях и символьных строках типа string речь пойдет далее в этой книге.) А выражения других типов, например с плавающей точкой, в операторе switch не допускаются. Зачастую выражение, управляющее оператором switch, просто сводится к одной переменной. Кроме того, константы выбора должны иметь тип, совместимый с типом выражения. В одном операторе switch не допускается наличие двух одинаковых по значению констант выбора.
Последовательность операторов из ветви default выполняется в том случае, если ни одна из констант выбора не совпадает с заданным выражением. Ветвь default не является обязательной. Если же она отсутствует и выражение не совпадает ни с одним из условий выбора, то никаких действий вообще не выполняется. Если же происходит совпадение с одним из условий выбора, то выполняются операторы, связанные с этим условием, вплоть до оператора break.
Ниже приведен пример программы, в котором демонстрируется применение оператора switch.
// Продемонстрировать применение оператора switch.
Using System;
class SwitchDemo { static void Main() { int i;
for(i=0; i<10; i++) switch(i) {
case 0:
Console.WriteLine("i равно нулю"); break; case 1:
Console.WriteLine("i равно единице"); break; case 2:
Console.WriteLine("i равно двум"); break; case 3:
Console.WriteLine("i равно трем"); break; case 4:
Console.WriteLine ("i равно четырем"); break;
default: (
Console.WriteLine("i равно или больше пяти"); break;
}
}
}
Результат выполнения этой программы выглядит следующим образом.
i
Равно
Нулю.
i
Равно
Единице.
i
Равно
Двум.
i
Равно
Трем.
i
Равно
Четырем.
i
Равно
Или больше
Пяти
i
Равно
Или больше
Пяти
i
Равно
Или больше
Пяти
i
Равно
Или больше
Пяти
i
Равно
Или больше
Пяти
Как видите, на каждом шаге цикла выполняются операторы, связанные с совпадающей константой выбора, в обход всех остальных операторов. Когда же значение
Переменной i становится равным или больше пяти, то оно не совпадает ни с одной из констант выбора, а следовательно, выполняются операторы из ветви default.
В приведенном выше примере оператором switch управляла переменная i типа int. Как пояснялось ранее, для управления оператором switch может быть использовано выражений любого целочисленного типа, включая и char. Ниже приведен пример применения выражения и констант выбора типа char в операторе switch.
// Использовать элементы типа char для управления оператором switch.
Using System;
class SwitchDemo2 { static void Main() { char ch;
for(ch='A'; ch<= ' E'; ch++) switch (ch) { case 'A1:
Console.WriteLine("ch содержит A"); break; case 'В':
Console.WriteLine("ch содержит В"); break; case 'С':
Console.WriteLine("ch содержит С"); break; case ' D' :
Console.WriteLine("ch содержит D"); break; case 'E':
Console.WriteLine("ch содержит E"); break;
}
}
}