PR

【C#】初心者でもわかるswitch case構文ガイド

【C#】
広告

はじめに

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の値が12以外の場合、どの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節が複数の値(12)を一括して処理する点が異なります。

分岐の処理

  • 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という列挙型を定義しています。この列挙型には、RedGreenBlueの3つの定数が含まれています。列挙型を使用することで、特定の値のセットを定義し、その値を使ってコードをより明確に表現することができます。
  • switchキーワードを使用して、color変数の値によって処理を分岐します。
  • case節は、列挙型で定義された各定数に対応しています。この場合、Color.RedColor.GreenColor.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#プログラミングにおいて、これらの知識が有効な判断を下すのにお役立てできれば幸いです。

広告
【C#】
広告
タイトルとURLをコピーしました