C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のif/elseとswitch-caseの違いとは?特徴と使い分けのポイントを解説

switchステートメントは、マッチ式とのパターンマッチングの結果に基づいて、候補リストの中から実行対象となる単一のセクションを選択する「選択ステートメント」です。

switchは、ひとつの式を3つ以上の条件と照らし合わせて判定したい場合に、if-else構文の代替としてよく利用されます。

さらに、switchステートメントにはif-elseより高速に動作するという特徴があります。switchではケースの数がどれだけ多くても平均比較回数が1回で済むため、任意のケースへの到達はO(1)で行えます。一方、if-elseは上から順番に条件を評価していくため、該当する条件が下にあるほど比較回数が増えてしまいます。

switchステートメントを使用した例

class Program{
    public enum Fruits { Red, Green, Blue }

    public static void Main(){
        Fruits c = (Fruits)(new Random()).Next(0, 3);

        switch (c){
            case Fruits.Red:
                Console.WriteLine("The Fruits is red");
                break;
            case Fruits.Green:
                Console.WriteLine("The Fruits is green");
                break;
            case Fruits.Blue:
                Console.WriteLine("The Fruits is blue");
                break;
            default:
                Console.WriteLine("The Fruits is unknown.");
                break;
        }
        Console.ReadLine();
    }
}

if-else構文を使用した例

class Program{
    public enum Fruits { Red, Green, Blue }

    public static void Main(){
        Fruits c = (Fruits)(new Random()).Next(0, 3);

        if (c == Fruits.Red)
            Console.WriteLine("The Fruits is red");
        else if (c == Fruits.Green)
            Console.WriteLine("The Fruits is green");
        else if (c == Fruits.Blue)
            Console.WriteLine("The Fruits is blue");
        else
            Console.WriteLine("The Fruits is unknown.");

        Console.ReadLine();
    }
}

switchとif-elseの使い分けのポイント

観点switchif-else
向いている処理単一の値と複数の定数値との一致判定範囲指定や複合的な論理条件の判定
可読性分岐が多くても構造が明快で読みやすい分岐が増えると冗長になりやすい
パフォーマンスジャンプテーブル化によりO(1)で分岐可能先頭から順に評価されるためO(n)

このように、特定の値による多岐分岐であればswitch、範囲判定や複雑な条件式が必要な場合はif-elseと、状況に応じて使い分けることで、可読性とパフォーマンスの両面でメリットを得られます。

  1. C#におけるstringとStringの違いは何ですか?

    C#のstringとStringの違いC#プログラミングにおいて、stringとStringはどちらも同じ型を指しますが、その扱いには微妙な違いがあります。Stringは.NET FrameworkのクラスであるSystem.Stringを直接表すものであり、一方、stringはC#言語が用意しているSystem.Stringのエイリアス(別名)です。つまり、両者はコンパイル後にまったく同じものとして扱われます。基本的な使い方の例string str = Welcome!;このように文字列変数を宣言する際は、通常小文字のstringを使用します。使い分けの目安厳密なルールはありませんが、一般的

  2. C#のinternal修飾子とprivate修飾子の違いを徹底解説!アクセス範囲の違いと使い分け

    C#には、クラスのメンバー(変数やメソッド)へのアクセス範囲を制御するための「アクセス修飾子」がいくつか用意されています。その中でもよく使われるのが internal(内部) と private(プライベート) です。この2つはどちらも外部からのアクセスを制限する役割を持ちますが、アクセスを許可する範囲が大きく異なります。本記事では、それぞれの特徴とコード例を通じて、両者の違いをわかりやすく解説します。 internal修飾子(内部アクセス指定子)とはinternal修飾子を付けたメンバーは、同じアセンブリ(プロジェクト)内であれば自由にアクセスできる ようになります。つまり、同一アプリケーシ