価値と無効性の分析
JetBrains Rider は値分析を実行し、「null」参照の可能性や冗長なブール比較、null チェックを検出するのに役立ちます。
Null 許容値を分析するさまざまな方法
JetBrains Rider では、いくつかの方法で値を分析できます:
言語構成体の動作を理解します。
次の例では、パラメーター
objの null 許容性が明示的にチェックされていることに基づき、JetBrains Rider はobjの値が実際に 'null' である可能性があると判断し、対応する警告を表示します:
コード アノテーション属性 ([CanBeNull]、 [NotNull]、 [ItemCanBeNull]、 [ItemNotNull] )は、 Null 許容参照型が無効な場合に利用されます。
次の例では、メソッド
Barに[CanBeNull]属性が付与されています。この情報をもとに、JetBrains Rider はBarの戻り値が null になる可能性があり、その上でメソッドを呼び出すと「null」参照が発生する可能性があることを警告しています:
C# 8.0 以降では、プロジェクトで Null 許容参照型が有効な場合、JetBrains Rider はコンパイラー解析の結果を再利用できます。
等価比較分析
JetBrains Rider は、以下の方法で等値演算子(== および != )の使用を分析できます:
浮動小数点数の等価比較を報告します。
「意図しない参照比較の可能性」(CS0252 および CS0253) のコンパイラー警告に加えて、比較される型の 1 つだけが
Equals()をオーバーライドする場合も 報告します。Equals()を使用して比較するように設計された型の等価演算子の意図しない使用を 検出するに役立つ [CannotApplyEqualityOperator] 属性を提供します。
値と null 可否の分析モード
JetBrains Rider では、異なるモードで値を分析できます:
- 楽観的
デフォルトでは、値解析モードは楽観的です。 このモードでは、値が明示的に null 許容性をチェックされた場合、またはシンボルに
[CanBeNull]または[ItemCanBeNull]属性が付与されている場合のみ、JetBrains Rider は 'null' 参照の可能性について警告します。 楽観的モードは上記の例で示されています。- 悲観的
このモードでは、値が明示的に null 許容性をチェックされていないすべての状況で、JetBrains Rider は 'null' 参照の可能性について警告します。ただし、シンボルに
[NotNull]または[ItemNotNull]属性が付与されている場合を除きます。
値分析モードを変更する、または分析を無効化するには、JetBrains Rider 設定 の ページで 値分析モード 環境設定 Ctrl+Alt+S を構成してください。
null 許容参照型
null 許容参照型 (NRT) が有効化されている場合、JetBrains Rider は C# コンパイラー分析の結果を再利用します。
NRT は、null 値可能性分析の全体的な精度を向上させますが、値が #nullable コンテキストのないコードから取得される場合など、NRT 契約に違反する場合があります。 このような場合、null 値可能性チェック (たとえば、 式は常に「true」または「false」です) で誤検知の警告が表示されることがあります。 null 値可能な API 契約を無視し、コード内の値に対する以前の操作で null 値になるかどうかが保証されている場合にのみ問題を報告するように選択できます。
この動作は、 Alt+Enter メニューから直接変更できます。

…または JetBrains Rider 設定 の ページで null 許容参照型の警告モード オプションを使用します。
JetBrains Rider が null 許容 API コントラクトを無視する場合、null 許容性分析はプログラムの制御フローに基づいて冗長な null チェックを検出します。 例えば:
NRT と JetBrains Rider による NRT サポートの詳細については、こちらのウェビナー録画をご覧ください:
値分析のさらなる例
こちらは、JetBrains Rider の値と null 許容性分析の追加例です:
単純な LINQ クエリで既に null 許容性チェックが行われている場合、JetBrains Rider はさらに null 許容性チェックを行うのは冗長なことを通知します:

[ItemNotNull]属性を持つコレクションにマークを付けた場合も同じことが起こります。
次の例は、 悲観的モードが有効になっている場合の値分析がどのように機能するかを示しています。 リストの値については null 可能性がチェックされていますが、リスト項目についてはチェックされていません。 そのため、JetBrains Rider はここで「null」参照の可能性について警告します。
