switch文

switch文

if文を用いればどんな条件判定でも可能です。
しかし場合によってはswitch文を用いたほうが便利な場合があります。


static void Main(string[] args)
{
    string str = "ab";

    switch (str.Length)
    {
        case 3:
            Console.WriteLine("strのサイズは3");
            break;
        case 2:
            Console.WriteLine("strのサイズは2");
            break;
        case 1:
            Console.WriteLine("strのサイズは1");
            break;
        case 0:
            Console.WriteLine("strのサイズは0");
            break;
        default:
            Console.WriteLine("strは予期しないサイズ");
            break;
    }

    Console.ReadLine();
}
strのサイズは2

switch文はある変数の値に応じて処理を複数に振り分けたい場合に便利です。
switch文は、指定した値と一致するcase句が実行されます。

switch文の式にはint型などの整数型、bool型、string型などが指定できますが、小数型(float、double、decimal)やstring型以外の参照型は指定できません。

case句には変数は指定できず、定数(リテラルも含む)を指定する必要があります。
定数とは、変数のようにプログラムの実行状況によって変化することのない値です。
コード中に直接記述される文字列や数値などは定数です。
(詳しくはリテラル定数列挙型を参照)

case句の行末で使用するのはセミコロン(;)ではなくコロン(:)であることに注意してください。

ひとつのcase句の終わりにはbreak文を記述します。
break文はswich文の処理を終了させます。

default句

switch文は与えられた値に一致するcase句の処理を実行しますが、どのcase句にも一致しなかった場合にはdefault句が実行されます。
default句には何も定数値を指定せず、コロンだけを記述します。
必要がない場合はdefault句は省略できます。

複数のcase句をまとめる

いくつかのcase句で同じ式を実行したい場合はcase句をまとめることができます。


string str = "abc";

switch (str)
{
    case null:
    case "":
        Console.WriteLine("strはnullまたは空文字");
        break;
    default:
        Console.WriteLine(str);
        break;
}

このコードは変数strがnullまたは空の場合に同じcase句を実行します。

ただし、case句に何か文がある場合はそのまま下のcase句に流れ落ちることはできません。


string str = "abc";

//このswitch文はエラー
switch (str)
{
    case "":
        Console.WriteLine("strは空文字");
    default:
        Console.WriteLine(str);
        break;
}

上のswitch文は「case "":」句の最後にbreak文がないためエラーになります。