価値と無効性の分析
ReSharper は、可能な「null」逆参照、重複ブール比較および null ・チェックを見つけるのに役立つ値分析を実行します。
Null 許容値を分析するさまざまな方法
ReSharper は、いくつかの方法で値を分析できます。
言語構成体の動作を理解します。
次の例では、パラメーター
obj
が明示的に null 可能性をチェックされたという事実に基づいて、ReSharper はobj
の値が実際に 'null' であると合理的に想定し、対応する警告を表示します。null 許容参照型が無効になっている場合、コードアノテーション属性 ([CanBeNull]、[NotNull]、[ItemCanBeNull]、[ItemNotNull]) に依存します。
次の例では、メソッド
Bar
が[CanBeNull]
属性でマークされています。この情報を使用して、ReSharper は、Bar
の戻り値が null になる可能性があり、そのメソッドを呼び出すと「null」逆参照につながる可能性があることを警告します。C# 8.0 以降では、プロジェクトで null 許容参照型が有効になっている場合、ReSharper はコンパイラー解析の結果を再利用できます。
等価比較分析
ReSharper は、次の方法で等価演算子 (==
および !=
) の使用を分析できます。
浮動小数点数の等価比較を報告します。
「意図しない参照比較の可能性」(CS0252 および CS0253) のコンパイラー警告に加えて、比較される型の 1 つだけが
Equals()
をオーバーライドする場合も報告します。Equals()
を使用して比較するように設計された型の等価演算子の意図しない使用を検出するに役立つ [CannotApplyEqualityOperator] 属性を提供します。
値と null 可否の分析モード
ReSharper はさまざまなモードで値を分析できます。
- 楽観的
デフォルトでは、値分析モードは楽観的です。このモードでは、値が NULL 可能性について明示的にチェックされた場合、またはシンボルが
[CanBeNull]
または[ItemCanBeNull]
属性でマークされている場合に限り、ReSharper は可能な 'null' 参照を警告します。楽観的モードは上記の例で示されています。- 悲観的
このモードでは、シンボルが
[NotNull]
または[ItemNotNull]
属性でマークされていない限り、ReSharper は値が NULL 可能性について明示的にチェックされていないすべてのコンテキストで可能な 'null' 参照を警告します。
値分析モードを変更したり、分析を無効にしたりするには、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 許容 API 契約を無視する場合、null 許容分析はプログラム制御フローに依存して冗長な null チェックを報告します。例:
NRT と ReSharper が NRT をサポートする方法の詳細については、次の webinar 録画を参照してください。
値分析のさらなる例
ReSharper の価と null 可能性の分析のいくつかの例を次に示します。
単純な LINQ クエリで null 値のチェックがすでに行われている場合、ReSharper はさらに null 可否チェックが冗長であることを通知します。
[ItemNotNull]
属性を持つコレクションにマークを付けた場合も同じことが起こります。次の例は、ペシミスティックモードが有効になっている場合に値分析がどのように機能するかを示しています。リストの値は null 可能かどうかチェックされましたが、リストアイテムはチェックされませんでした。ReSharper は、「null」逆参照の可能性についてここで警告します。
関連ページ:
アノテーションを使用してコードインスペクションを改善する
コード検査や他の多くの ReSharper の機能は、問題を検出し、改善を提案し、他の方法であなたを手助けするために、言語構成の動作を知ることに主に依存しています。ただし、この種の分析ではすべてを検出できるわけではありません。例: メソッドがフォーマットメソッドとして設計されている場合、メソッドの呼び出しに必要な引数が含まれていない場合、構造解析では潜在的な問題は見つかりません。この場合や他の多くの場合、ReSharper のは非常に役立ちます。このフレームワークで宣言された属性を使用することに...
契約アノテーション
契約アノテーションでは、与えられた入力に対する期待される出力を定義することができます。言い換えれば、関数の参照型とブール型引数とその戻り値の間の依存関係を定義することができます。契約アノテーションのメカニズムにより、より簡単で安全な方法で消費できる API を作成できます。を使って関数を装飾することによって契約アノテーションを実装することができます。あなたのソースコード、JetBrains.Annotations 名前空間を参照するでそれをやりたいなら。外部アノテーションを使用して既存のバイナリ...