A switch utasításoknak tekintélyes története van a programozási nyelvekben. A C nyelvben jelentek meg, ahol a sebességük miatt kedvelték őket. Ez a sebesség azonban a nagyon korlátozott funkcionalitás rovására ment. C#-ban a switch utasítás szerepe túlmutat az egész számokon: a switch utasítások bármilyen típusra, értékre vagy referenciára kiterjedhetnek.
Ha funkcionális nyelvből érkezel, akkor C#-ban a diszkriminált uniók és a mintaillesztés használatához a switch utasításokkal (és a máshol tárgyalt switch kifejezésekkel) végzett munka áll a legközelebb. A típusbiztonság kikényszerítésében azonban meg sem közelítik a diszkriminált uniók erejét.
Az egyszerű switch utasítások a C-s őseikre hasonlítanak, mert a switch, a case, a break és a default kombinációjából épülnek fel.
int direction = GetDirection();
switch (direction)
{
case 1:
GoLeft();
break;
case 2:
GoRight();
break;
default:
MarkTime();
break;
}
A fenti minta bármilyen egyszerű (primitív + string) típussal használható.
Ha referenciatípusok is szóba jönnek, akkor további szintaxisra van szükség: először a típus lefelé kasztolásához, majd őrök (when) hozzáadásához, bár őröket egyszerű értékek eseteihez is kapcsolhatsz. Ezt mutatja az alábbi példa:
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 ág elhagyható, de általában érdemes megadni.break utasítás kötelező minden nem üres case ágban.case-címkék összes argumentumának típusát a switch argumentumának típusából kell származtatni. Egy Object típusú switch argumentum persze a legszélesebb kört engedi meg.case argumentum tagjait.case argumentummal rendelkező case is ugyanarra a kódblokkra hivatkozhat.A switch utasításról szóló dokumentáció bevezetést nyújt a switch utasításokba.