C# 8.0 以降ではパターンマッチング機能が大幅に強化され、従来の switch
文に加えて switch
式が利用できるようになりました。これにより、条件分岐をより簡潔に記述でき、可読性や保守性が向上します。本記事では switch
式の基本と実用的な使い方を解説します。
従来のswitch文
これまでは switch
文を使って値に応じた処理を記述していました。
string GetDayType(int day)
{
switch (day)
{
case 0:
return "日曜日";
case 1:
return "月曜日";
case 2:
return "火曜日";
default:
return "不明";
}
}
しかしこの方法では冗長になりがちです。
switch式の基本構文
C# 8.0 以降では switch
式が導入され、より簡潔に記述できます。
string GetDayType(int day) => day switch
{
0 => "日曜日",
1 => "月曜日",
2 => "火曜日",
_ => "不明"
};
各パターンの結果を直接返すことができるため、コード量が大幅に減ります。
型パターンの活用
switch
式では型チェックとキャストを同時に行えます。
object value = 123;
string result = value switch
{
int i => $"整数: {i}",
string s => $"文字列: {s}",
null => "null値",
_ => "その他の型"
};
Console.WriteLine(result); // 整数: 123
プロパティパターン
オブジェクトのプロパティに基づいた条件分岐も可能です。
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
Person p = new Person { Name = "Taro", Age = 20 };
string category = p switch
{
{ Age: < 13 } => "子供",
{ Age: >= 13 and < 20 } => "ティーン",
{ Age: >= 20 } => "大人",
_ => "不明"
};
Console.WriteLine(category); // 大人
論理パターン
and
・or
・not
を使って論理演算を行うことも可能です。
int number = 15;
string desc = number switch
{
>= 1 and <= 10 => "1から10の範囲",
> 10 and <= 20 => "11から20の範囲",
not 100 => "100以外",
_ => "その他"
};
Console.WriteLine(desc); // 11から20の範囲
まとめ
C# のパターンマッチングは switch
式によって大幅に強化されました。
switch
式で分岐処理を簡潔に書ける- 型パターンで型判定とキャストを同時に行える
- プロパティパターンや論理パターンで柔軟な条件分岐が可能
これらを活用することで、複雑な条件分岐もシンプルで読みやすいコードにできます。モダンな C# では積極的に switch
式を取り入れるのがベストプラクティスです。