整数値の分析 (積分演算)
JetBrains Rider は、コード内の整数値の流れをトラックし、冗長なまたは誤っている可能性のあるステートメントを報告できます。 すべての C# 整数数値型 — int、 uint、 byte、 sbyte、 short、 ushort、 long、 ulong — をサポートし、次の問題について警告します。
常に
trueまたはfalseに評価される関係 / 等式演算子int値をチェックする到達不能なswitchケース1による乗算や0の加算など、意味のない算術演算(リテラルまたは定数を除く: JetBrains Rider は、x + 0のような式が意図的なものであると想定します)intオーバーフローの可能性0による除算の可能性System.Mathメソッドの呼び出しで発生する可能性のあるエラー。対応する基になる型を持つ列挙型での上記の問題。
整数値分析を切り替える
整数値の分析はデフォルトで有効化されています。 必要に応じて、JetBrains Rider 設定 Ctrl+Alt+S の ページで 整数演算を分析する チェックボックスをオフにすることで無効化できます。
仕組み
JetBrains Rider は、その整数を生成または影響を与える可能性のあるすべてのステートメントや式の考えられる結果に従って、各整数の可能な値の範囲を絞り込みます。 いくつかの例を考えてみましょう。
JetBrains Rider は、以下の例の temp < 0 が常に false と評価されると推測できます。なぜなら、 Math.Abs は常に非負の値を返すためです。
次の例では、JetBrains Rider は、最後の return までに input の値が -100 ... 100 の範囲内にあり、より大きな divider で除算するとゼロに向かって切り捨てられると推測します。
アノテーションを使用して分析を絞り込む
整数値の分析には、2 つの JetBrains.Annotations 属性 ([NonNegativeValue] と [ValueRange(from, to)] )があります。
これらの属性を int を返す型メンバーおよび int パラメーターで使用して、既知の制約を指定し、分析の精度を向上させることができます。
これは、メソッドパラメーターに [NonNegativeValueAttribute] でアノテーションを付けて、メソッド本体内の分析を改善する例です。 パラメーターが負ではないと分かっている場合、JetBrains Rider はそのパラメーターに対するすべての冗長な操作を報告できます:
次の例は、メソッドにアノテーションを付けると、その使用箇所に関する冗長なチェックを見つけるのにどのように役立つかを示しています。