整数值分析(整数运算)
JetBrains Rider 可以跟踪整数值在代码中的流动,并报告冗余或可能有误的语句。 它支持所有 C# 整数数值类型 — 整数、 uint、 byte、 sbyte、 short、 ushort、 long 和 ulong — 并警告您以下问题:
关系/相等运算符始终计算为
true或false,无法到达的
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 推断出在最后的 返回 时, 输入 的值在 -100 ... 100 范围内,并且当被更大的 divider 除时,将向零截断。
使用注解优化分析
有两个 JetBrains.Annotations 属性 ([NonNegativeValue] 和 [ValueRange(from, to)] )用于整数值分析。
您可以将这些属性用于返回 int 的类型成员以及带有 int 参数的类型成员,以指定已知约束,从而提高分析精度。
以下是一个示例,展示如何使用 [NonNegativeValueAttribute]注释方法参数,以优化方法体内的分析。 知道参数是非负的,JetBrains Rider 可以报告该参数上的所有冗余操作:
以下示例演示了如何通过注解方法来帮助发现其用法中的冗余检查: