JetBrains Rider 2026.1 Help

コードインスペクション: ソース式は常に提供されたパターンに一致します。

以下の例では、 case string myStr は型チェックのように見えますが、実際には 2 つのことを行います。

  • System.String のインスタンスの str をチェックします。

  • strnull ではないことを確認します。

ただし、メソッドシグネチャーによれば、 strSystem.String のインスタンスであるため、 case string myStr の唯一の目的は、 strnull であるかどうかを確認することです。

そのため、JetBrains Rider は、マッチング式で使われている型パターンがコードの実際のセマンティクス、つまり null チェックでしかないことを示していないと通知します。

パターンマッチング式での null チェックには、C# 8 で新しく導入された オブジェクトパターンを以下の構文で使用します: { }。 このパターンは、 null 値以外のすべてと一致するように設計されており、 クイックフィックスで提案されます。

void Test(string str) { switch (str) { case string myStr: // use myStr break; } }
void Test(string str) { switch (str) { case { } myStr: // use myStr break; } }

式のタイプが変わらないときにタイプパターンの代わりにオブジェクトパターンを使用すると、次の利点があります。

  • コードを読んだ人なら誰でも、これは単なる null チェックであることがわかります。

  • 例えば、初期例のコードをリファクタリングして str パラメーターの型を object に変更した場合でも、コードはコンパイルされ続けますが、型チェックが行われ、実行時にコード挙動の変化を見るまで気付かないかもしれません。 一方、 { } myStr は常に null チェックを行い、 str の型に関係なく同様に動作します。

2026 年 6 月 12 日