C# switchの最新の使い方

C#では、switch文が進化し、C# 8.0以降ではより柔軟で簡潔な記述が可能になりました。この資料では、従来のswitch文と比較しながら、最新のswitch式とその応用例について解説します。


1. 従来のswitch

従来のswitch文は、複数のケースに基づいて処理を分岐します。

int number = 2;
switch (number)
{
    case 1:
        Console.WriteLine("One");
        break;
    case 2:
        Console.WriteLine("Two");
        break;
    default:
        Console.WriteLine("Other");
        break;
}

2. 最新のswitch式(C# 8.0以降)

基本構文

従来のswitch文に比べ、switch式では簡潔に値を返すことができます。

int number = 2;
string result = number switch
{
    1 => "One",
    2 => "Two",
    _ => "Other"
};
Console.WriteLine(result); // "Two"
  • => を使用して処理を簡潔に記述します。
  • _ はデフォルトケース(default)として機能します。

3. パターンマッチングの活用

switch式では、パターンマッチングを組み合わせて柔軟な条件分岐が可能です。

型によるパターンマッチング

int number = 2;
string result = number switch
{
    1 => "One",
    2 => "Two",
    _ => "Other"
};
Console.WriteLine(result); // "Two"

条件付きパターン

int number = 25;
string result = number switch
{
    > 0 and <= 10 => "Between 1 and 10",
    > 10 and <= 20 => "Between 11 and 20",
    _ => "Other"
};
Console.WriteLine(result); // "Other"

4. when 条件を使用した拡張

各ケースに追加の条件を指定できます。

int number = 15;
string result = number switch
{
    int n when n % 2 == 0 => "Even",
    int n when n % 2 != 0 => "Odd",
    _ => "Unknown"
};
Console.WriteLine(result); // "Odd"

5. リストやタプルの活用

switch式では、タプルやリストを利用した複雑なパターンにも対応可能です。

タプルを使った例

(int x, int y) point = (1, 2);
string result = point switch
{
    (0, 0) => "Origin",
    (1, _) => "On X-axis at 1",
    (_, 2) => "On Y-axis at 2",
    _ => "Somewhere else"
};
Console.WriteLine(result); // "On Y-axis at 2"

6. switch式を使った簡易計算

char operation = '+';
int x = 5, y = 10;
int result = operation switch
{
    '+' => x + y,
    '-' => x - y,
    '*' => x * y,
    '/' => x / y,
    _ => throw new InvalidOperationException("Unknown operation")
};
Console.WriteLine(result); // 15

まとめ

  • 従来のswitchよりも、switchを活用するとコードが簡潔になります。
  • パターンマッチングと組み合わせることで、型や条件を柔軟に分岐可能です。
  • whenやタプルを利用すれば、複雑なケースにも対応できます。

最新のswitch機能を活用し、より読みやすく、メンテナンス性の高いコードを目指しましょう!

C#,条件式

Posted by hidepon