ReSharper 2026.1 Help

価値と無効性の分析

ReSharper は、値分析を行い、可能性のある「null」の逆参照や冗長なブール比較および null チェックを見つけるのに役立ちます。

Null 許容値を分析するさまざまな方法

ReSharper は、いくつかの方法で値を分析できます:

  • 言語構成体の動作を理解します。

    以下の例では、パラメーター obj が明示的に null 許容性をチェックされたという事実に基づき、ReSharper は obj の値が実際に「null」である可能性があると合理的に想定し、対応する警告を表示します:

    ReSharper: null 可能性分析
  • null 許容参照型 が無効になっている場合は、 コードアノテーション属性 ([CanBeNull][NotNull][ItemCanBeNull][ItemNotNull]) に依存します。

    次の例では、メソッド Bar[CanBeNull] 属性でマークされています。この情報を利用して、ReSharper は Bar の戻り値が null である可能性があること、そしてそのメソッドを呼び出すと「null」逆参照につながる可能性があることを警告します:

    ReSharper: null 可能性分析
  • C# 8.0 以降、プロジェクトで null 許容参照型が有効化されている場合、ReSharper はコンパイラー解析の結果を再利用できます。

等価比較分析

ReSharper は、次の方法で等価演算子 (== および !=) の使用を分析できます:

値と null 可否の分析モード

ReSharper は、異なるモードで値を分析できます:

楽観的

デフォルトでは、値分析モードは楽観的です。 このモードでは、値が明示的に null 許容性をチェックされた場合、またはシンボルが [CanBeNull] または [ItemCanBeNull] 属性でマークされている場合にのみ、ReSharper は可能な「null」逆参照について警告します。 楽観的モードは上記の例で示されています。

悲観的

このモードでは、値が明示的に null 許容性をチェックされていないすべてのコンテキストで、ReSharper は可能な「null」逆参照について警告します。ただし、シンボルが [NotNull] または [ItemNotNull] 属性でマークされている場合は除きます。

値分析モードを変更したり、分析を無効化したりするには、ReSharper オプション の コードインスペクション | 設定 ページで 値分析モード 環境設定を構成します Alt+R、O

null 許容参照型

null 許容参照型 (NRT) が有効化されている場合、ReSharper は C# コンパイラー分析の結果を再利用します。

NRT は、null 値可能性分析の全体的な精度を向上させますが、値が #nullable コンテキストのないコードから取得される場合など、NRT 契約に違反する場合があります。 このような場合、null 値可能性チェック (たとえば、 式は常に「true」または「false」です) で誤検知の警告が表示されることがあります。 null 値可能な API 契約を無視し、コード内の値に対する以前の操作で null 値になるかどうかが保証されている場合にのみ問題を報告するように選択できます。

この動作は、 Alt+Enter メニューから直接変更できます。

ReSharper: null 許容参照型

... または、ReSharper オプション の コードインスペクション | 設定 ページで null 許容参照型の警告モード オプションを使用します。

ReSharper が null 許容 API コントラクトを無視する場合、null 許容性解析はプログラムの制御フローに依存して冗長な null チェックを報告します。 たとえば、次のようになります。

var myString = ApiMethod(); if (myString is null) throw new ApplicationException("the string is null"); // warning 'Expression is always true' // 'myString' cannot be null because it's already checked for null in our code if (myString != null) Console.WriteLine(myString);

NRT と ReSharper のサポート方法の詳細については、次のウェビナー録画をご覧ください:

値分析のさらなる例

ここに、ReSharper による値および null 許容性分析のさらなる例を示します:

  • 単純な LINQ クエリで null 許容性のチェックがすでに行われている場合、ReSharper はさらに null 許容性チェックが冗長なことを通知します:

    コレクション項目の冗長な NULL 可否チェック
  • [ItemNotNull] 属性を持つコレクションにマークを付けた場合も同じことが起こります。

    コレクション項目の冗長な NULL 可否チェック
  • 次の例は、 悲観的モードが有効になっている場合の値分析がどのように機能するかを示しています。 リストの値については null 可能性がチェックされていますが、リスト項目についてはチェックされていません。 したがって、ReSharper はここで「null」逆参照の可能性について警告します。

    コレクション項目の冗長な NULL 可否チェック
2026 年 6 月 12 日