Többirányú elágazás
Az if elágazás esetén a kulcs szerepkört egy logikai kifejezés tölti be. A logikai kifejezés két lehetséges értékkel bírhat - igaz vagy hamis. Ennek segítségével két elágazási irányban folytatódhat tovább a program végrehajtása.
Érdekes, de a két elágazási irány a programok tervezése során sokkal gyakrabban elegendő, mint első pillantásra látszik. A három irányú elágazást leggyakrabban például két darab összekapcsolt kétirányú elágazással oldjuk meg:
{
// az 'a' változó értéke 0
}
else if (a>0)
{
// az 'a' változó értéke pozitív
}
else
{
// az 'a' változó értéke negatív
}
Hasonlóan megoldható tetszőleges elágazási mennyiség kezelése is. Tegyük fel, hogy a történelem érdemjegyünknek megfelelően szeretnénk 5 elágazási ágat létrehozni. Két megoldás is lehetséges:
if (jegy==2) ... ; // az 'erdemjegy' változó értéke 2
if (jegy==3) ... ; // az 'erdemjegy' változó értéke 3
if (jegy==4) ... ; // az 'erdemjegy' változó értéke 4
if (jegy==5) ... ; // az 'erdemjegy' változó értéke 5
A második megoldás hatékonyabb:
else if (jegy==2) ... ; // az 'erdemjegy' változó értéke 2
else if (jegy==3) ... ; // az 'erdemjegy' változó értéke 3
else if (jegy==4) ... ; // az 'erdemjegy' változó értéke 4
else if (jegy==5) ... ; // az 'erdemjegy' változó értéke 5
A hatékonyság az else-k használatával érhető el. Az első változatban bármennyi is az a változó értéke - minden esetben mind az öt if feltétel kiértékelődik. Ez nyilván időbe kerül, processzoridőbe. A futtató rendszer ugyanis nem képes optimalizálni, nem képes detektálni, hogy az öt elágazási lehetőség egymást kizárja. Számára minden if feltétel külön-külön kiértékelendő.
A második megoldásnál minden maradék ág else ág, tehát ha valamelyik feltétel teljesül, a többi feltétel már nem értékelődik ki. A fenti második megoldás ezen szempontból jobban hangsúlyos változata az alábbi:
else
{
if (jegy==2) ... ; // az 'erdemjegy' változó értéke 2
else
{
if (jegy==3) ... ; // az 'erdemjegy' változó értéke 3
else
{
if (jegy==4) ... ; // az 'erdemjegy' változó értéke 4
else
{
if (jegy==5) ... ; // az 'erdemjegy' változó értéke 5
}
}
}
}
A megoldás
Ugyanakkor a több irányú elágazás megoldására saját nyelvi konstrukció van - switch a neve. Ez angolul kapcsolót jelent, mely több irányba is elfordítható. A szintaktikára egy példa:
{
case 1:
// az érdemjegy értéke 1
// ide jönnek az utasítások
// akármennyi
// egészen a break-ig
Console.WriteLine("ez biza egyes");
Console.WriteLine("megbuktál");
break;
case 2:
// az érdemjegy értéke 2
Console.WriteLine("sikeres");
Console.WriteLine("de gyengécske");
break;
case 3:
// az érdemjegy értéke 3
break;
case 4:
// az érdemjegy értéke 4
break;
case 5:
// az érdemjegy értéke 5
break;
}
A switch után zárójelben meg kell adni az elágazás alapját jelentő kifejezést (mely legegyszerűbb esetben egyetlen változó). A kifejezés (vagy változó) típusa egész szám (int) vagy szöveg (string) kell legyen!

A switch saját blokkal rendelkezik, melynek kezdetét és végét a szokásos kapcsos zárójelpár jelzi. Ezen blokk összességében több programutasítást is tartalmaz, mely utasítássorozatba belépési pontokat definiálhatunk a case segítségével. A case angol szó, magyar jelentése eset.

Az esetek az utasítássorozat belépési pontjai, tehát nem önálló programblokkok. Ezért is nem tartozik hozzájuk önálló kapcsos zárójeles blokk. Amennyiben mégis azt szeretnénk, hogy valamely esethez tartozó utasítássorozat végrehajtása után már egyéb switch belsejében szereplő utasítás ne hajtódjon végre, úgy ezt kérhetjük a break segítségével. A break hatására a switch hátralévő utasításai nem hajtódnak végre, hanem ugrunk a switch mögötti (rákövetkező) utasításra.

Amennyiben valamely belépési ponthoz tartozó utasítássorozatot nem zárunk le break segítségével, úgy a kilépési utasítás hiányában a vezérlés folytatódhat a következő belépési ponthoz tartozó utasítások végrehajtásával. Ez lehet szándékos, amennyiben eseteket kívánunk összevonni:
{
case 1:
Console.WriteLine("ez biza egyes");
Console.WriteLine("megbuktál");
break;
case 2:
Console.WriteLine("Elégséges");
case 3:
Console.WriteLine("Elégséges vagy közepes");
case 4:
Console.WriteLine("Elégséges,közepes vagy jó");
case 5:
Console.WriteLine("Nem buktál meg. Grat!");
break;
}
Lezárás
Mivel az esetek összevonása elég ritka, a break hiánya leggyakrabban hibás működés jele. Ugyanakkor jegyezzük meg, hogy nem csak a break alkalmas erre a célra. Az alábbi utasítások mindegyike megfelelő lehet:
- break,
- continue,
- return,
- throw.