整数值分析(整数运算)
ReSharper 可以跟踪整数值在代码中的流动,并报告冗余或可能有误的语句。 它支持所有 C# 整数数值类型 — int、 uint、 byte、 sbyte、 short、 ushort、 long 和 ulong — 并警告您以下问题:
关系/相等运算符始终计算为
true或false,无法到达的
switch分支检查int值,无意义的算术运算,例如乘以
1或加上0(字面量或常量除外:ReSharper 假设类似x + 0的表达式是有意的),可能的
int溢出,可能的除以
0,调用
System.Math方法时可能的错误,枚举类型中具有相应底层类型的上述问题。
切换整数值分析
整数值分析默认启用。 如果需要,您可以通过清除 ReSharper 选项 Alt+R, O 页面上的 分析整数算术 复选框来禁用它。
运作方式
ReSharper 根据所有可能影响或生成该整数的语句和表达式的可能结果,缩小每个整数的可能值范围。 让我们来看一些示例。
ReSharper 可以推断出以下示例中的 temp < 0 始终计算为 false ,因为 Math.Abs 始终返回非负值。
在以下示例中,ReSharper 推断出在最后的 return 中, input 的值在 -100 ... 100 范围内,并且当被更大的 divider 除时,将向零截断。
使用注解优化分析
有两个 JetBrains.Annotations 属性 ([NonNegativeValue] 和 [ValueRange(from, to)] )用于整数值分析。
您可以将这些属性用于返回 int 的类型成员以及带有 int 参数的类型成员,以指定已知约束,从而提高分析精度。
以下是使用 [NonNegativeValueAttribute] 注解方法参数的示例,以优化方法体内的分析。 知道参数是非负的,ReSharper 可以报告该参数上的所有冗余操作:
以下示例演示了如何通过注解方法来帮助发现其使用中的冗余检查: