C#のswitch文における複数ケースの代替方法
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