はじめに
C#におけるswitch case文は、複数の条件分岐を簡潔に記述するための強力なツールです。
この記事では、switch case文の基本から応用までを詳しく解説し、C#プログラミングにおけるその活用法を深めます。
1. switch case文の基本
1.1 基本的な構文
C#でのswitch case文の基本的な使用法は次のようになります。
int number = 1;
switch (number)
{
case 1:
Console.WriteLine("One");
break;
case 2:
Console.WriteLine("Two");
break;
default:
Console.WriteLine("Other");
break;
}
このコードは、number変数の値に応じて異なるメッセージを表示します。
コード解説
switchキーワードを使用して、number変数の値によって処理を分岐します。caseキーワードは、条件が一致する場合に実行される処理を示します。defaultキーワードは、どのcaseにも一致しない場合に実行される処理を示します。
分岐の処理
numberの値が1の場合、case 1が一致し、Console.WriteLine("One");が実行されます。その後、break;ステートメントが実行され、switch文から抜けます。numberの値が2の場合、case 2が一致し、Console.WriteLine("Two");が実行されます。その後、break;ステートメントが実行され、switch文から抜けます。numberの値が1や2以外の場合、どのcaseにも一致しないため、default節が実行されます。その結果、Console.WriteLine("Other");が実行されます。
1.2 複数のケース
単一のcaseラベルで複数の値を処理することもできます。
switch (number)
{
case 1:
case 2:
Console.WriteLine("One or Two");
break;
default:
Console.WriteLine("Other");
break;
}
コード解説
switchキーワードを使用して、number変数の値によって処理を分岐します。case節が複数の値(1と2)を一括して処理する点が異なります。
分岐の処理
numberの値が1または2の場合、case 1:およびcase 2:が一致し、それぞれのConsole.WriteLine("One or Two");が実行されます。その後、break;ステートメントが実行され、switch文から抜けます。numberの値が1または2以外の場合、どのcaseにも一致しないため、default節が実行されます。その結果、Console.WriteLine("Other");が実行されます。
2. switch caseの応用
2.1 範囲の指定
C# 7.0以降、whenキーワードを使用して、ケースに範囲を指定できます。
switch (number)
{
case int n when (n >= 1 && n <= 5):
Console.WriteLine("Between 1 and 5");
break;
default:
Console.WriteLine("Other");
break;
}
コード解説
このC#のコードは、C# 7.0以降で導入されたパターンマッチ機能を使用して、変数numberの値に応じて処理を分岐する方法を示しています。以下では、各部分の詳細を解説します。
switchキーワードを使用して、number変数の値によって処理を分岐します。case節で、int nというパターン変数を宣言し、その後にwhenキーワードを使って条件式(n >= 1 && n <= 5)を指定しています。この条件に一致する場合にのみ処理が実行されます。
分岐の処理
numberの値が1から5の範囲内にある場合、case int n when (n >= 1 && n <= 5):が一致し、Console.WriteLine("Between 1 and 5");が実行されます。その後、break;ステートメントが実行され、switch文から抜けます。numberの値が1から5の範囲外の場合、どのcaseにも一致しないため、default節が実行されます。その結果、Console.WriteLine("Other");が実行されます。
パターンマッチの利点
- パターンマッチを使用することで、より柔軟な条件に基づいて分岐処理を行うことができます。例えば、型や条件に基づいた複雑なパターンを簡潔に表現することができます。
whenキーワードを使うことで、より複雑な条件を組み合わせることができます。この例では、numberが1から5の範囲内であることをチェックしています。
2.2 変数の使用
変数をcaseラベルで直接使用することも可能です。
int one = 1;
switch (number)
{
case var n when n == one:
Console.WriteLine("One");
break;
default:
Console.WriteLine("Other");
break;
}
コード解説
このC#のコードは、C# 7.0以降で導入されたパターンマッチ機能を使用して、変数numberの値に応じて処理を分岐する方法を示しています。特に、case節でパターン変数var nを使用し、その後にwhenキーワードを使って条件式 n == one を指定しています。以下では、各部分の詳細を解説します。
switchキーワードを使用して、number変数の値によって処理を分岐します。case節で、var nというパターン変数を宣言し、その後にwhenキーワードを使って条件式n == oneを指定しています。この条件に一致する場合にのみ処理が実行されます。
分岐の処理
numberの値がoneと等しい場合、case var n when n == one:が一致し、Console.WriteLine("One");が実行されます。その後、break;ステートメントが実行され、switch文から抜けます。numberの値がoneと等しくない場合、どのcaseにも一致しないため、default節が実行されます。その結果、Console.WriteLine("Other");が実行されます。
パターンマッチの利点
- パターンマッチを使用することで、より柔軟な条件に基づいて分岐処理を行うことができます。例えば、型や条件に基づいた複雑なパターンを簡潔に表現することができます。
varパターンを使用することで、case節でのパターン変数の型を明示的に指定せずに、パターンマッチングを行うことができます。
2.3 文字列の処理
switch case文は文字列にも使用できます。
string text = "hello";
switch (text)
{
case "hello":
Console.WriteLine("Hello");
break;
case "world":
Console.WriteLine("World");
break;
default:
Console.WriteLine("Other");
break;
}
コード解説
このC#のコードは、switch文を使用して文字列変数textの値に応じて処理を分岐する方法を示しています。以下では、各部分の詳細を解説します。
switchキーワードを使用して、text変数の値によって処理を分岐します。case節は、特定の文字列値に一致する場合に実行されます。default節は、どのcaseにも一致しない場合に実行されます。
分岐の処理
textの値が"hello"の場合、case "hello":が一致し、Console.WriteLine("Hello");が実行されます。その後、break;ステートメントが実行され、switch文から抜けます。textの値が"world"の場合、case "world":が一致し、Console.WriteLine("World");が実行されます。その後、break;ステートメントが実行され、switch文から抜けます。textの値がどのcaseにも一致しない場合、default節が実行され、Console.WriteLine("Other");が実行されます。
3. より高度なテクニック
3.1 列挙型(enum)の使用
列挙型(enum)をswitch case文で使用することもできます。
enum Color { Red, Green, Blue }
Color color = Color.Red;
switch (color)
{
case Color.Red:
Console.WriteLine("Red");
break;
case Color.Green:
Console.WriteLine("Green");
break;
case Color.Blue:
Console.WriteLine("Blue");
break;
}
コード解説
このC#のコードは、列挙型(enum)を使用して色を表すColorを定義し、switch文を使用して色に基づいて処理を分岐する方法を示しています。
enum Color { Red, Green, Blue }でColorという列挙型を定義しています。この列挙型には、Red、Green、Blueの3つの定数が含まれています。列挙型を使用することで、特定の値のセットを定義し、その値を使ってコードをより明確に表現することができます。switchキーワードを使用して、color変数の値によって処理を分岐します。case節は、列挙型で定義された各定数に対応しています。この場合、Color.Red、Color.Green、Color.Blueの3つのケースがあります。break;ステートメントは、各case節の処理が完了した後、switch文から抜けるために使用されます。
分岐の処理
colorの値がColor.Redの場合、case Color.Red:が一致し、Console.WriteLine("Red");が実行されます。colorの値がColor.Greenの場合、case Color.Green:が一致し、Console.WriteLine("Green");が実行されます。colorの値がColor.Blueの場合、case Color.Blue:が一致し、Console.WriteLine("Blue");が実行されます。
4. switch caseの最新の進化
C# 8.0以降、switch式という新しい形式が導入されました。これは、よりコンパクトな構文で複数の条件分岐を処理できるものです。
var result = text switch
{
"hello" => "Hello",
"world" => "World",
_ => "Other"
};
Console.WriteLine(result);
コード解説
このswitch式は、値を直接返すことができ、さらに簡潔な条件分岐の記述が可能になります。
switchキーワードを使用して、text変数の値によって処理を分岐します。ただし、このswitch文は通常のswitch文とは異なります。代わりに、switch式と呼ばれる新しい構文を使用しています。switch式の中で、=>演算子を使用して個々のケースに対する結果を指定します。_はワイルドカードとして機能し、どのケースにも一致しない場合に実行されます。このパターンは、default節と同様の役割を果たします。
分岐の処理
textの値が"hello"の場合、"Hello"がresultに代入されます。textの値が"world"の場合、"World"がresultに代入されます。textの値がどのケースにも一致しない場合、"Other"がresultに代入されます。
注意事項
switch式は、通常のswitch文とは異なり、式の一部として値を返します。そのため、switch式は変数に直接結果を代入することができます。switch式では、各ケースの結果は直接指定されます。そのため、breakステートメントやcase節には必要ありません。
まとめ
C#におけるswitch case文は、様々な形で条件分岐を表現する強力なツールです。
基本的な使用法から応用テクニック、最新の進化に至るまで、この記事ではswitch case文の全てを網羅して解説しました。
C#プログラミングにおいて、これらの知識が有効な判断を下すのにお役立てできれば幸いです。

