Поиск

Оператор switch

В операторе 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 - Принимается.