switch 敘述在程式語言的發展中有著悠久的歷史。它最初是在 C 中問世,並因為速度快而備受青睞。不過,這樣的速度是犧牲功能換來的,而當時的功能非常受限。在 C# 中,switch 敘述的用途已經超越了整數。switch 敘述可以涵蓋任何型別、值或參考。
如果你來自函式程式語言,那麼在 C# 中,使用 switch 敘述(以及其他地方會提到的 switch 運算式)就是最接近判別聯合與模式比對的做法了。不過,它們在強制型別安全這方面,遠遠不及判別聯合。
簡單的 switch 敘述就像它們的 C 祖先一樣,把 switch、case、break 和 default 組合在一起。
int direction = GetDirection();
switch (direction)
{
case 1:
GoLeft();
break;
case 2:
GoRight();
break;
default:
MarkTime();
break;
}
上面這個模式可以用在任何簡單型別(基本型別與字串)上。
一旦加入了參考型別,就會牽涉到額外的語法:首先要把型別向下轉型,接著再加上防護(when),不過防護也可以用在簡單的值情況上。以下示範:
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 子句是選用的,但通常建議加上。case 子句來說,break 敘述都是必要的。case 標籤引數的型別,都必須衍生自 switch 引數的型別。型別為 Object 的 switch 引數,允許的範圍當然最廣。case 引數的成員。case 引數的 case,可以指向同一個程式區塊。switch 敘述的文件提供了 switch 敘述的入門介紹。