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の使い分けのポイント
| 観点 | switch | if-else |
|---|---|---|
| 向いている処理 | 単一の値と複数の定数値との一致判定 | 範囲指定や複合的な論理条件の判定 |
| 可読性 | 分岐が多くても構造が明快で読みやすい | 分岐が増えると冗長になりやすい |
| パフォーマンス | ジャンプテーブル化によりO(1)で分岐可能 | 先頭から順に評価されるためO(n) |
このように、特定の値による多岐分岐であればswitch、範囲判定や複雑な条件式が必要な場合はif-elseと、状況に応じて使い分けることで、可読性とパフォーマンスの両面でメリットを得られます。
-
C#におけるstringとStringの違いは何ですか?
C#のstringとStringの違いC#プログラミングにおいて、stringとStringはどちらも同じ型を指しますが、その扱いには微妙な違いがあります。Stringは.NET FrameworkのクラスであるSystem.Stringを直接表すものであり、一方、stringはC#言語が用意しているSystem.Stringのエイリアス(別名)です。つまり、両者はコンパイル後にまったく同じものとして扱われます。基本的な使い方の例string str = Welcome!;このように文字列変数を宣言する際は、通常小文字のstringを使用します。使い分けの目安厳密なルールはありませんが、一般的
-
C#のinternal修飾子とprivate修飾子の違いを徹底解説!アクセス範囲の違いと使い分け
C#には、クラスのメンバー(変数やメソッド)へのアクセス範囲を制御するための「アクセス修飾子」がいくつか用意されています。その中でもよく使われるのが internal(内部) と private(プライベート) です。この2つはどちらも外部からのアクセスを制限する役割を持ちますが、アクセスを許可する範囲が大きく異なります。本記事では、それぞれの特徴とコード例を通じて、両者の違いをわかりやすく解説します。 internal修飾子(内部アクセス指定子)とはinternal修飾子を付けたメンバーは、同じアセンブリ(プロジェクト)内であれば自由にアクセスできる ようになります。つまり、同一アプリケーシ