軌道
/
C#
C#
/
課程大綱
/
switch 敘述
sw

switch 敘述 在 C#

2 個練習

關於 switch 敘述

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 敘述的入門介紹。

透過 GitHub 編輯 連結會在新視窗或分頁中開啟

學習 switch 敘述

練習已鎖定

再解鎖 6 個練習,就能練習 switch 敘述