C#のswitch文における複数ケースの代替方法

2024-08-22

C#のswitch文における複数ケース

基本的な構文:

switch (expression)
{
    case value1:
    case value2:
    case value3:
        // 複数のケースに共通する処理
        break;

    case value4:
        // value4の処理
        break;

    default:
        // どのケースにも該当しない場合の処理
        break;
}

説明:

  • expression: 評価される式です。
  • value1, value2, value3, value4: 比較される値です。
  • break: ケース内の処理が完了したことを示します。

例:

int dayOfWeek = 2;

switch (dayOfWeek)
{
    case 1:
    case 2:
    case 3:
        Console.WriteLine("Weekday");
        break;

    case 4:
    case 5:
        Console.WriteLine("Weekend");
        break;

    case 6:
    case 7:
        Console.WriteLine("Holiday");
        break;

    default:
        Console.WriteLine("Invalid day");
        break;
}

この例では、曜日を表す数値をswitch文で評価し、それに対応するメッセージを出力します。複数のケースが同じ処理を実行する場合は、caseキーワードを続けて使用します。

注意:

  • 複数のケースが同じ処理を実行する場合、最初のケースがマッチすると、その後のケースも実行されます。これを防ぐために、breakステートメントを使用します。
  • defaultケースは、すべてのケースに該当しない場合に実行されます。



int dayOfWeek = 2;

switch (dayOfWeek)
{
    case 1:
    case 2:
    case 3:
        Console.WriteLine("Weekday");
        break;

    case 4:
    case 5:
        Console.WriteLine("Weekend");
        break;

    case 6:
    case 7:
        Console.WriteLine("Holiday");
        break;

    default:
        Console.WriteLine("Invalid day");
        break;
}

解説:

  • dayOfWeek変数に曜日の数値を格納します。
  • switch文でdayOfWeekの値を評価します。
  • 複数のケースが同じ処理を実行する場合、caseキーワードを続けて使用します。

例2: メニュー選択

int choice = 3;

switch (choice)
{
    case 1:
        Console.WriteLine("Option 1 selected");
        break;

    case 2:
        Console.WriteLine("Option 2 selected");
        break;

    case 3:
    case 4:
        Console.WriteLine("Option 3 or 4 selected");
        break;

    default:
        Console.WriteLine("Invalid choice");
        break;
}
  • choice変数にメニューの選択を格納します。
  • switch文でchoiceの値を評価します。



if-else文

最も基本的な代替方法です。複数の条件を評価し、それに応じて処理を実行します。

int dayOfWeek = 2;

if (dayOfWeek == 1 || dayOfWeek == 2 || dayOfWeek == 3)
{
    Console.WriteLine("Weekday");
}
else if (dayOfWeek == 4 || dayOfWeek == 5)
{
    Console.WriteLine("Weekend");
}
else if (dayOfWeek == 6 || dayOfWeek == 7)
{
    Console.WriteLine("Holiday");
}
else
{
    Console.WriteLine("Invalid day");
}

辞書(Dictionary)

キーと値のペアを格納する辞書を使用し、ケースの値をキーとして、対応する処理を値として格納します。

Dictionary<int, string> dayOfWeekMap = new Dictionary<int, string>()
{
    { 1, "Weekday" },
    { 2, "Weekday" },
    { 3, "Weekday" },
    { 4, "Weekend" },
    { 5, "Weekend" },
    { 6, "Holiday" },
    { 7, "Holiday" }
};

int dayOfWeek = 2;

if (dayOfWeekMap.TryGetValue(dayOfWeek, out string result))
{
    Console.WriteLine(result);
}
else
{
    Console.WriteLine("Invalid day");
}

パターンマッチング

C# 8以降で導入されたパターンマッチングを使用し、より簡潔な表現が可能になります。

int dayOfWeek = 2;

string result = dayOfWeek switch
{
    1 or 2 or 3 => "Weekday",
    4 or 5 => "Weekend",
    6 or 7 => "Holiday",
    _ => "Invalid day"
};

Console.WriteLine(result);

c# switch-statement



C#におけるStringとstringの代替方法

**C#**では、Stringとstringという2つのキーワードがありますが、実はどちらも同じものを指しています。つまり、C#ではstringがエイリアスとして定義されており、Stringとまったく同じ意味を持っています。これは、C#の設計上の選択であり、開発者がどちらのキーワードを使っても同じコードが生成されるようになっています。...


C#における[Flags] Enum属性の代替方法

**C#において、[Flags]**属性は、列挙型(enum)に対して適用される属性です。この属性は、列挙型のメンバーがビットフラグとして使用されることを示します。つまり、複数の列挙型メンバーを組み合わせることで、複数の状態やオプションを表現することができます。...


C#の隠れた機能:代替的なプログラミング手法

**C#**は、Microsoftが開発したオブジェクト指向プログラミング言語です。その多機能性と柔軟性により、さまざまなアプリケーション開発に広く使われています。しかし、その機能の豊富さゆえに、一部の機能が「隠れた」存在となることもあります。...


C#におけるDataTableに対するLINQクエリ代替方法

**LINQ (Language-Integrated Query)**は、.NET Frameworkで提供されるクエリ構文です。これにより、オブジェクトのコレクションを宣言的に操作することができます。DataTableは、データベーステーブルの構造とデータを表現するオブジェクトであり、LINQを使ってクエリを実行することができます。...


C#における基底コンストラクタ呼び出しの具体的なコード例と解説

**C#**において、クラスが別のクラスから継承している場合、そのクラスのコンストラクタは基底クラスのコンストラクタを呼び出す必要があります。これは、基底クラスの初期化が子クラスの初期化の前提となるためです。base()キーワードを使用:public class DerivedClass : BaseClass { public DerivedClass() : base() { // Derived class's constructor body } } この場合、DerivedClassのコンストラクタはBaseClassのデフォルトコンストラクタを呼び出します。...



c# switch statement

C#でDateTime型の誕生日から年齢を計算するコードの解説

日本語:C#でDateTime型の誕生日から年齢を計算するには、以下の手順に従います。誕生日を取得する: DateTime型の変数に誕生日の日付を設定します。現在の時刻を取得する: DateTime. Nowを使用して現在の時刻を取得します。


C#で相対時間を計算できるようになれば、あなたのプログラミングスキルが飛躍的に向上する!

DateTime 構造体は、日付と時刻を表す型です。この構造体には、相対時間を計算するためのいくつかのメソッドが用意されています。例えば、以下のコードは、現在時刻から2時間後の時刻を取得します。また、以下のコードは、2つの DateTime 構造体間の差分を取得します。


C#で辞書を値でソートするコード例

**C#**において、辞書(Dictionary)の要素を値でソートするには、通常以下の手順を踏みます。値とキーのペアを格納する新しいリストを作成する。元の辞書の各要素を新しいリストに追加する。新しいリストを値でソートする。ソートされたリストからキーと値を抽出する。


C#におけるTypeから新しいオブジェクトインスタンスを作成する際の性能比較:コード例と解説

日本語訳:C#において、Typeオブジェクトから新しいオブジェクトインスタンスを作成する方法は、パフォーマンスに影響を与えます。この解説では、さまざまな方法とその性能について説明します。Activator. CreateInstanceメソッド:


C#ループ制御: breakとcontinueの代替方法

C#のループ(forループ、whileループ、foreachループなど)において、breakとcontinueは、ループの制御に重要な役割を果たします。機能: ループの処理を即座に終了します。使用タイミング:ループの条件が満たされた場合ループ内でエラーが発生した場合特定の条件を満たしたときにループを終了したい場合