JetBrains Fleet 1.48 ヘルプ

C# の値と null 可能性の分析

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

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

JetBrains Fleet は、いくつかの方法で値を分析できます。

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

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

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

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

    JetBrains Fleet: Nullability analysis
  • C# 8.0 以降では、プロジェクトで null 許容参照型が有効になっている場合、JetBrains Fleet はコンパイラー解析の結果を再利用できます。

等価比較分析

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

  • 浮動小数点数の等価比較を報告します。

  • 「意図しない参照比較の可能性」(CS0252 および CS0253) のコンパイラー警告に加えて、比較される型の 1 つだけが Equals() をオーバーライドする場合も報告します

  • Equals() を使用して比較するように設計された型の等価演算子の意図しない使用を検出するに役立つ [CannotApplyEqualityOperator] 属性を提供します。

null 許容参照型

null 許容参照型 (NRT) が有効な場合、JetBrains Fleet は C# コンパイラー解析の結果を再利用します。

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

値分析のさらなる例

JetBrains Fleet の値と null 可能性の分析の例をさらにいくつか示します。

  • 単純な LINQ クエリで NULL 可能性チェックがすでに行われている場合、JetBrains Fleet は、それ以上の NULL 可能性チェックが冗長であることを示します。

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

    Redundant nullability check for collection item
2025 年 5 月 15 日

関連ページ:

スマートモード

JetBrains Fleet は、軽量テキストエディターとしても、インテリジェントなコードエディターとしても機能します。システムリソースを最適化するため、リソースを大量に消費する機能は必要な場合にのみ有効になります。スマートモードを有効にすると、個々のファイルまたは複数のファイルを含むフォルダーをシームレスに操作できます。スマートモードを有効にする右上隅にあるスマートモードのステータスアイコンをクリックします。表示されるポップアップで、「有効にする」をクリックします。必要なインデックス作成と準...

アノテーションを使用して C# のコードインスペクションを改善する

コード検査およびその他の多くの JetBrains Fleet 機能は、問題を検出し、改善の可能性を提案し、他の方法で役立つように、言語構造の動作を知ることに主に依存しています。ただし、この種の分析ではすべてを検出できるわけではありません。例: メソッドがフォーマットメソッドとして設計されている場合、メソッドの呼び出しに必要な引数が含まれていない場合、構造解析では潜在的な問題は見つかりません。このような場合や他の多くの場合、JetBrains Fleet のが非常に役立ちます。このフレームワーク...

C# の契約のアノテーション

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