JetBrains Rider 2025.2 Help

整数值分析(整数运算)

JetBrains Rider 可以跟踪整数值在代码中的流动,并报告冗余或可能有误的语句。 它支持所有 C# 整数数值类型整数uintbytesbyteshortushortlongulong — 并警告您以下问题:

  • 关系/相等运算符始终计算为 truefalse

  • 无法到达的 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 始终返回非负值。

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

在以下示例中,JetBrains Rider 推断出在最后的 返回 时, 输入 的值在 -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 }

使用注解优化分析

有两个 JetBrains.Annotations 属性[NonNegativeValue][ValueRange(from, to)] )用于整数值分析。

您可以将这些属性用于返回 int 的类型成员以及带有 int 参数的类型成员,以指定已知约束,从而提高分析精度。

以下是一个示例,展示如何使用 [NonNegativeValueAttribute]注释方法参数,以优化方法体内的分析。 知道参数是非负的,JetBrains Rider 可以报告该参数上的所有冗余操作:

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年 9月 26日