ReSharper 2026.1 Help

整数値の分析 (積分演算)

ReSharper は、コード内の整数値のフローをトラックし、冗長または誤りの可能性があるステートメントを報告できます。 すべての C# 整数数値型intuintbytesbyteshortushortlongulong — をサポートし、次の問題について警告します。

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

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

  • 1 による乗算や 0 の加算など、意味のない算術演算(リテラルや定数を除く:ReSharper は x + 0 のような式は意図的と見なします)

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

  • 0 による除算の可能性

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

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

整数値分析を切り替える

整数値の分析はデフォルトで有効になっています。 必要に応じて、ReSharper オプション Alt+R、O コードインスペクション | 設定 ページで 整数演算を分析する チェックボックスの選択を解除して無効化できます

仕組み

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

ReSharper は、以下の例の temp < 0 が常に false と評価されることを推論できます。なぜなら、 Math.Abs は常に非負の値を返すためです。

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

次の例では、ReSharper は、最後の 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] でアノテーションを付けて、メソッド本体内の分析を改善する例です。 パラメーターが非負であることがわかっている場合、ReSharper はそのパラメーターに対するすべての冗長な操作を報告できます:

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 }
2026 年 6 月 12 日