JetBrains Fleet 1.48 ヘルプ

C# の整数値の解析

JetBrains Fleet は、コード内の整数値の流れを追跡し、冗長なステートメントや誤ったステートメントの可能性があるステートメントを報告します。すべての C# 整数数値型intuintbytesbyteshortushortlongulong — をサポートし、次の問題について警告します。

  • 常に true または false に評価される関係 / 等式演算子

  • int 値をチェックする到達不能な switch ケース

  • 1 による乗算や 0 の加算など、意味のない算術演算(リテラルまたは定数を除く): JetBrains Fleet は、x + 0 のような表現が意図的であることを前提としています)

  • int オーバーフローの可能性

  • 0 による除算の可能性

  • System.Math メソッドの呼び出しで発生する可能性のあるエラー。

  • 対応する基になる型を持つ列挙型での上記の問題。

使い方

JetBrains Fleet は、その整数を生成または影響を与えるすべてのステートメントおよび式の考えられる結果に従って、各整数の可能な値の範囲を絞り込みます。いくつかの例を考えてみましょう。

JetBrains Fleet は、Math.Abs が常に非負の値を返すため、以下の例の temp < 0 は常に false に評価されると推測できます。

void TestInput(int input) { var temp = Math.Abs(input); // do something if(temp < 0) // Expression is always false Console.WriteLine("Some output"); }

次の例では、JetBrains Fleet は、最後の return によって、input の値が -100 ... 100 の範囲内にあり、より大きな divider で除算すると、ゼロに向かって切り捨てられると推測します。

int TestDivision(int input, int delta) { const int divider = 500; if(input < -100 || input > 100) return input; input = input / divider; // do something return delta + input; // Addition of 0 }

アノテーションを使用して分析を絞り込む

整数値の分析には、2 つの JetBrains.Annotations 属性[NonNegativeValue][ValueRange(from, to)])があります。

これらの属性を int を返す型メンバーおよび int パラメーターで使用して、既知の制約を指定し、分析の精度を向上させることができます。

以下は、メソッドパラメーターに [NonNegativeValueAttribute] のアノテーションを付けて、メソッド本体内の分析を絞り込む例です。パラメーターが負ではないことがわかっているため、JetBrains Fleet はそのパラメーターに対するすべての冗長操作をレポートできます。

void TestSwitch([NonNegativeValue] int input) { var newValue = input switch { 0 => 1, -1 => 0, // Case is heuristically unreachable _ => input, }; if (input < 0) // Expression is always false Console.WriteLine("some output"); }

次の例は、メソッドにアノテーションを付けると、その使用箇所に関する冗長なチェックを見つけるのにどのように役立つかを示しています。

[ValueRange(1,6)] int RollDice() => // my random generator void Play() { var firstRoll = RollDice(); if (firstRoll < 1 || firstRoll > 6) // Expression is always false throw new ArgumentOutOfRangeException(); // roll again }
2025 年 5 月 06 日

関連ページ:

スマートモード

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

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

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

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

JetBrains Fleet は、値分析を実行して、可能性のある「null」逆参照、冗長なブール比較および null チェックを見つけるのに役立ちます。Null 許容値を分析するさまざまな方法:JetBrains Fleet は、いくつかの方法で値を分析できます。言語構成体の動作を理解します。以下の例では、パラメーターが null 可能性について明示的にチェックされたという事実に基づいて、JetBrains Fleet は、の値が確かに「null」である可能性があると合理的に想定し、対応する...

C# でのコレクションアクセス分析

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