ReSharper 2021.1 ヘルプ

値と null 可能性の分析

ReSharper は、可能な「null」逆参照、重複ブール比較および null ・チェックを見つけるのに役立つ値分析を実行します。

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

ReSharper は、2 つの一般的な方法で値を分析します。

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

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

    ReSharper: Nullability analysis
  • コードアノテーション属性に依存する ( [CanBeNull] , [NotNull] , [ItemCanBeNull] , [ItemNotNull] )

    この例では、メソッド Bar[CanBeNull] 属性でマークされています。この情報を使用して、ReSharper は Bar の戻り値が null になる可能性があることを警告します。

    ReSharper: Nullability analysis

値と null 可否の分析モード

ReSharper はさまざまなモードで値を分析できます。

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

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

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

値分析のさらなる例

ReSharper の価と null 可能性の分析のいくつかの例を次に示します。

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

    Redundant nullability check for collection item

  • [ItemNotNull] 属性を持つコレクションにマークを付けた場合も同じことが起こります。

    Redundant nullability check for collection item

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

    Redundant nullability check for collection item

関連ページ:

アノテーションを使用してコードインスペクションを調整する | ReSharper

コード検査や他の多くの ReSharper の機能は、問題を検出し、改善を提案し、他の方法であなたを手助けするために、言語構成の動作を知ることに主に依存しています。しかし、この種の分析ではすべてを検出することはできません。例: メソッドがを返さないように設計されており、そのクライアントがそれに応じて設計されている場合、誰かがを返すメソッドを変更した場合、構造分析によって問題が見つかることはありません。これと他の多くのケースでは、ReSharper のは大きな助けになります。このフレームワークで宣...

契約アノテーション

契約アノテーションでは、与えられた入力に対する期待される出力を定義することができます。言い換えれば、関数の参照型とブール型引数とその戻り値の間の依存関係を定義することができます。契約アノテーションのメカニズムにより、より簡単で安全な方法で消費できる API を作成できます。を使用して関数を装飾することにより、契約アノテーションを実装できます。ソースコード JetBrains.Annotations 名前空間を参照するで実行する場合。外部アノテーションを使用して、既存のバイナリモジュールの関数にアノ...

コレクションアクセス解析 | ReSharper

ReSharper は、コレクションアイテムの値を分析するだけでなく、使用する各コレクション全体も分析します。このコレクションへの読み取りアクセスがあっても、コレクションが満たされない、または変更されない場合は警告しますコレクションが決して読み込まれない場合すべての標準コレクションタイプは、デフォルトでこの方法で分析されます。必要に応じて、この分析をから派生したカスタムコレクションに適用することもできます。この場合、ReSharper に、コレクションの public メソッドの呼び出しがコレク...