`s

`switch`文 の C#

2個の演習

`switch`文について

switch文には、プログラミング言語の中で由緒ある歴史があります。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節は省略できますが、通常は書いておくのが望ましいです。
  • 空でないcase節には、break文が必須です。
  • 言うまでもなく、caseラベルの引数の型はすべて、switchの引数の型から派生している必要があります。switchの引数がObject型であれば、当然ながら最も広い範囲を扱えます。
  • ガード式には、caseの引数のメンバーだけでなく、スコープ内にあるものなら何でも書けます。
  • 異なるcase引数を持つ複数のcaseから、同じコードブロックを参照できます。

switch文のドキュメントでは、switch文の入門が説明されています。

GitHubで編集 リンクは新しいウィンドウまたはタブで開きます

`switch`文を学習する

練習はロックされています

`switch`文を練習するには、あと6個の演習のロックを解除してください