rksoftware

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

C# 11 の新機能を確認「 string 定数での Span<char> のパターン マッチ 」

C# 11 の新機能を確認しています。目次は次の記事です。
rksoftware.hatenablog.com

今回は 「 string 定数での Span<vhar> のパターン マッチ 」。公式 Learn の記事は次です。

learn.microsoft.com

記載は 「 C# 11 以降では、次の例のように~ 」から始まる箇所です。

Span<char> の値を条件にパターンマッチする場合に文字列とマッチできます。前述 Learn の記述ではどちらが評価される側でどちらがパターンか、それともどちらも行けるのか少し読んで自身が持てない感じなので書いて確認していきましょう。

■ 確認

次のようなコードが書けます。

Span<char> saitama = "saitama".ToCharArray();
ReadOnlySpan<char> tokyo = "tokyo".ToCharArray();

Console.WriteLine($"{saitama} is {((saitama is "saitama")? "最高":"もうすこしがんまりましょう")} です。");
Console.WriteLine($"{tokyo} is {((tokyo is "saitama") ? "最高" : "もうすこしがんまりましょう")} です。");
// saitama is 最高 です。
// tokyo is もうすこしがんまりましょう です。

ちなみに前者のコードは .NET 6 を指定した場合は次のエラーになります。

エラー CS8936 機能 '定数文字列の ReadOnly/Span<char> に一致するパターン' は C# 10.0 では使用できません。言語バージョン 11.0 以上を使用してください。

Span と文字列を逆にはできません。次のコードはエラーで実行できません。

Span<char> saitama = "saitama".ToCharArray();
Console.WriteLine(("saitama" is saitama));  // エラー CS0029 型 'System.Span<char>' を 'string' に暗黙的に変換できません

■ 思えておきましょう

この新機能は使う機会のない人はあまり使わないと思います。使うべき時に忘れていないようしっかり覚えておきましょう。