【发布时间】:2018-01-08 21:11:27
【问题描述】:
我正在尝试确定是否有一种编程方式来检查我的代码库中可能存在的DivideByZeroException。我的代码库包括一系列相对简单到相对复杂的公式,其中大约 1500 个(并且还在增长)。编写新公式时,必须注意确保安全地进行除法,以避免在处理这些公式时出现异常。
例如
decimal val1 = 1.1m;
decimal val2 = 0m;
var res = val1/val2; //bad
var res = val2 == 0 ? 0 : val1/val2; //good
是否有任何方法可以使用 Roslyn 或 Resharper 或其他工具来检查我的代码库并确定 DivideByZeroException 没有得到适当防范的情况?这些公式基于足够动态和复杂的数据,使得使用简单的单元测试很难检测到这一点。这些公式可以访问数百个输入,并且可以动态地相互构建。
我的环境是:VS2017Pro,Resharper(最新)。
【问题讨论】:
-
回答您唯一的问题:是的,有可能。您需要解析每个
/并检查是否有if (x == 0)用于划分x变量 -
请注意,在您的情况下,无论如何您都不会得到 DivideByZeroException - 您会得到正无穷大,因为您正在执行浮点除法。
-
@JonSkeet 谢谢。我的代码通常使用小数,这会引发异常。我已经相应地更新了示例。
标签: c# resharper roslyn roslyn-code-analysis