В операторе
switch
вы указываете выражение, возвращающее некоторое значение и один или несколько фрагментов кода, которые будут выполняться в зависимости от результата выражения. Он аналогичен применению нескольких операторов
if/else,
но если в последних вы можете указать несколько условий (возможно, не связанных между собой), то в операторе
switch
содержится лишь один условный оператор, за которым следуют блоки, которые нужно выполнять. Вот его синтаксис:
switch
(выражение-переключатель) {
case
выражение-константа:
оператор
оператор_перехода
case
выражение-константа_N:
onepamop_N [default]
}
Здесь нужно усвоить два правила. Во-первых,
выражение-переключатель
должно иметь тип
sbyte, byte, short, ushort, int, uint, long, ulong, char
или
string
(или
епит
на основе одного из этих типов) или же должно быть явно преобразовано в один из этих типов. Во-вторых, в каждом операторе
case
(кроме последнего блока) должен быть тот или иной
операто-р_перехода,
включая оператор
break.
Поскольку работает
switch
не так, как в некоторых других языках, я подробней остановлюсь на отличиях в разделе "Оператор
switch
без передачи управления вниз".
По сути оператор
switch
работает так же, как //. Сначала вычисляется
выражение-переключатель,
а затем результат сравнивается со всеми
выражениями-константами
или
case-метками,
определенными в операторах
case.
При обнаружении совпадения управление передается первой строке кода в соответствующем операторе
case.
Кроме нескольких операторов
case,
в
switch
можно указать оператор
default.
Это аналогично конструкции
else
в операторе //. Каждый оператор
switch
может иметь только одну метку
default.
При ее отсутствии, если значение
выражения-переключателя
не соответствует ни одной case-метке, управление передается на первую строку после закрывающей скобки оператора
switch.
Рассмотрим пример, в котором класс
Payment
использует оператор
switch
для определения выбранного платежного средства:
enura Tenders : int {
Cash = 1,
Visa,
MasterCard,
AmericanExpress
•.
};
class Payment
{
public Payment(Tenders tender)
<
this.Tender = tender; }
protected Tenders tender; public Tenders Tender {
get
{
return this/tender;
}
set
{
this.tender = value;
} }
public void ProcessPaymentO {
switch ((int)(this.tender)) {
case (int)Tenders.Cash:
Console.Кг11е1_1пе("\пНаличные - Принимаются"); break;
case (int)Tenders.Visa:
Console.WriteLine("\nVisa - Принимается"); break;
case (int)Tenders.MasterCard:
Console.WriteLine("\nMastercard - Принимается"); break;
case (int)Tenders.AmericanExpress:
Console.WriteLine("\nAmerican Express - Принимается"); break;
default:
Console.WriteLine("\nll3BHHHTe, недопустимое "+
"платежное средство"); break; } } }
class SwitchApp {
public static void Main() {
Payment payment = new Payment(Tenders.Visa); payment.P rocessPayment(); } >
Поскольку созданному экземпляру класса
Payment
мы передали значение
Tenders. Visa,
в результате выполнения этого приложения мы увидим:
Visa - Принимается.