rksoftware

Visual Studio とか C# とかが好きです

C# 2.0 以降の新機能の確認 - C# 8.0 - プロパティ パターン (パターンマッチングの強化)

C# 2.0 以降の新機能を一つづつ確認していきます。
以前に一度行ったのですが、公式ドキュメント再編でリンク切れしているところを見つけてしまったので。今ならもっと簡潔なサンプルが欠けるところもあるだろうし、せっかくなので今もう一度確認して行きます。

プロパティ パターン (パターンマッチングの強化)

 https://docs.microsoft.com/ja-jp/dotnet/csharp/tutorials/pattern-matching#add-occupancy-pricing
 プロパティの値でマッチできる。一部のプロパティだけも可能。
 この機能でようやくパターンマッチングという名前で想像される機能となったのではないでしょうか?

var point = new Point(x: 1, y: 2);
var x = point switch
{
    Point { X: 0, Y: 2 } => 0,  // X が 0、Y が 2 の場合にマッチする
    Point { X: 2, Y: 3 } => 2,  // X が 2、Y が 3 の場合にマッチする
    Point { X: 1, Y: _ } => 1,  // _ はワイルドカード。何にでもマッチする。X が 1、Y は何であってもマッチする
    _ => -1            // default。それまでのどの条件にもマッチしない場合にマッチする。
};

// 1 が出力される
Console.WriteLine(x);