ReSharper 2026.1 Help

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

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

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

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

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

そのため、ReSharper は一致式で使われている型パターンがコードの本来のセマンティクス、つまり 単なる 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 日