دستورهای switch تاریخچهی کهن در زبانهای برنامهنویسی دارند. این دستورها در C معرفی شدند، جایی که بهخاطر سرعتشان ارزشمند بودند. آن سرعت به قیمت کارایی بسیار محدودی تمام شد. در C# نقش دستور switch فراتر از اعداد صحیح گسترش یافته است. دستورهای switch میتوانند هر نوع، مقدار یا ارجاع دلخواهی را در بر بگیرند.
اگر از یک زبان تابعی میآیید، کار کردن با دستورهای switch (و عبارتهای switch که جای دیگری بحث شدهاند) نزدیکترین چیزی است که در C# به «اتحاد تفکیکشده» و «تطبیق الگو» خواهید یافت. با این حال، آنها بههیچوجه قدرت اتحاد تفکیکشده را در اعمال ایمنی نوع ندارند.
دستورهای switch ساده به نیاکان C خود شباهت دارند و switch، case، break و default را با هم ترکیب میکنند.
int direction = GetDirection();
switch (direction)
{
case 1:
GoLeft();
break;
case 2:
GoRight();
break;
default:
MarkTime();
break;
}
الگوی بالا را میتوان با هر نوع ساده (نوعهای اولیه بهعلاوهی رشتهها) به کار برد.
وقتی نوعهای ارجاعی هم به میان میآیند، نحوهی نگارش اضافی لازم میشود، اول برای تبدیل نوع به پایین و بعد برای افزودن «نگهبان»ها (when)، هرچند میتوان نگهبانها را با بندهای caseیی که مقادیر ساده دارند هم به کار برد. این موضوع در ادامه نشان داده شده است:
Animal animal = GetAnimal();
switch(animal)
{
case Dog canine:
case Coyote canine:
canine.Bark();
break;
case Cat cat when cat.HasOnly8Lives():
cat.IsCareful();
cat.Meow();
break;
case Cat cat:
cat.Meow();
break;
}
default اختیاری است، اما معمولاً مطلوب است.break برای هر بند case غیرخالی الزامی است.case باید از نوع آرگومان switch مشتق شده باشد. آرگومان switch از نوع Object بدیهی است که گستردهترین دامنه را فراهم میکند.case.case با آرگومانهای متفاوت میتوانند به یک بلوک کد یکسان اشاره کنند.مستندات دستور switch مقدمهای برای دستورهای switch ارائه میدهد.