rksoftware

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

C# 2.0 以降の新機能の確認 - C# 7.0 - パターンマッチ (Pattern matching)

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

パターンマッチ (Pattern matching)

 https://docs.microsoft.com/ja-jp/dotnet/csharp/pattern-matching
 ifswitch で型を判断しての処理が簡潔に書ける。
 [ 注意 ] 後の言語バージョンで機能強化されています。このサンプルは C# 7.0 時点での仕様のサンプルです。

static void Main(string[] args)
{
    string textIs = IsPattern(10);
    Console.WriteLine(textIs);              // 引数は int の 10 です

    string textSwitch = SwitchPattern("10");
    Console.WriteLine(textSwitch);          // 引数は string の 10 です
}

static string IsPattern(object arg)
{
    if (arg is int i) { return $"引数は int の {i} です"; }
    if (arg is double d) { return $"引数は double の {d} です"; }
    if (arg is string s) { return $"引数は string の {s} です"; }
    return "unknown";
}

static string SwitchPattern(object arg)
{
    switch (arg)
    {
        case int i: return $"引数は int の {i} です";
        case double d: return $"引数は double の {d} です";
        case string s: return $"引数は string の {s} です";
        default: return "unknown";
    }
}