【C#】switch文の使い方について詳しく解説

この記事では、switch文の基本的な使い方から応用的なテクニックまで、サンプルコードを交えてわかりやすく解説します。

目次

switch文とは

switch文は、条件分岐の一つで、指定した変数の値によって処理を分岐するための構文です。if文と同じように、プログラムの流れを制御することができます。

以下は、switch文の基本的な構文です。

switch(変数名)
{
    case 値1:
        // 値1に対する処理
        break;
    case 値2:
        // 値2に対する処理
        break;
    default:
        // 上記以外の場合の処理
        break;
}

switch文では、まず「変数名」で指定した変数の値を評価し、その値に応じてcase節内の処理が実行されます。

case節は複数指定することができます。また、default節は上記以外の場合に実行される処理を書くために使用します。

switch文の基本的な使い方

C#において、switch文は複数の条件分岐を行うための構文です。基本的な使い方について解説します。

case文の書き方

switch文では、比較する値を指定し、その値がどのcase文に一致するかを判断します。例えば、以下のようなコードが考えられます。

int num = 2;
switch (num)
{
    case 1:
        Console.WriteLine("numは1です");
        break;
    case 2:
        Console.WriteLine("numは2です");
        break;
    case 3:
        Console.WriteLine("numは3です");
        break;
}

この場合、変数numの値が2であるため、「numは2です」というメッセージが表示されます。

break文の使い方

上記のコードで気づくかもしれませんが、各case文には必ずbreak文を書く必要があります。

これは、該当するcase文以降の処理を実行しないようにするためです。例えば、以下のようなコードが考えられます。

int num = 2;
switch (num)
{
    case 1:
        Console.WriteLine("numは1です");
    case 2:
        Console.WriteLine("numは2です");
    case 3:
        Console.WriteLine("numは3です");
}

この場合、break文を書いていないため、「numは2です」の後に続けて「numは3です」というメッセージが表示されます。つまり、break文を書かないと該当するcase文以降も実行されてしまいます。

default文の使い方

また、全てのcase文に一致しなかった場合に実行される処理を指定することもできます。それがdefault文です。例えば、以下のようなコードが考えられます。

int num = 4;
switch (num)
{
    case 1:
        Console.WriteLine("numは1です");
        break;
    case 2:
        Console.WriteLine("numは2です");
        break;
    case 3:
        Console.WriteLine("numは3です");
        break;
    default:
        Console.WriteLine("該当する数字がありませんでした");
}

この場合、num == 4に相当するcaseが存在しないため、「該当する数字がありませんでした」というメッセージが表示されます。

以上がC#におけるswitch文の基本的な使い方となります。

switch文の応用的な使い方

switch文は、複数の条件分岐を行う際に便利な構文です。前回は基本的な使い方について解説しましたが、今回はより応用的な使い方について紹介します。

複数のcase文をまとめる

複数の条件が同じ処理をする場合、case文をまとめることができます。例えば、以下のように書くことができます。

int num = 2;
switch (num)
{
    case 1:
    case 2:
        Console.WriteLine("numは1または2です");
        break;
    case 3:
        Console.WriteLine("numは3です");
        break;
}

caseとbreakはセットで使うことが基本ですが、複数条件で同じ処理を行う場合は、意図的にbreakを省略することもあります。

この場合、numが1または2の場合に同じ処理が実行されます。

ただし、省略した理由をコメントとして残しておかないと、実装忘れであると、同じプロジェクトを触る他のプログラマに勘違いされてしまう可能性があるので注意しましょう。

switch文の入れ子

switch文自体を別のswitch文内に入れ子にすることもできます。以下はその例です。

int num1 = 1, num2 = 2;

switch (num1)
{
    case 1:
        switch (num2)
        {
            case 1:
                Console.WriteLine("num1とnum2は共に1です");
                break;
            case 2:
                Console.WriteLine("num1は1で、num2は2です");
                break;
        }
        break;
    default:
        Console.WriteLine("どちらか一方または両方が1ではありません");
        break;
}

ただし、可読性が低くなるため、switch文の中にswitch文を書く必要があるのであれば、if文で書き直すか、処理を関数化して可読性を上げるようにしましょう。

switch文での型の比較

C#では、オブジェクト指向プログラミング言語であるため、変数や定数に格納された値もオブジェクトとして扱われます。

そのため、文字列や整数以外でもswitch文を使用することが可能です。ただし、注意点もあります。以下の例を見てみましょう。

string str = "Hello";

switch (str)
{
    case "Hello":
        Console.WriteLine("こんにちわ");
        break;
    case "Bye":
        Console.WriteLine("さようなら");
        break;
}

このように、整数以外の値でも分岐させられるので、より高度かつ可読性の高いコードを書くことが可能です。

目次