我有以下代码,其中数字乘以60000,将分钟转换为毫秒.我已经实现了溢出检查,如下所示.我仍然得到以下代码分析交战.如何克服这个警告而不压制它?
警告:CA2233:更正'ApplicationSessionDAL.IsSessionExpired(short)'中'sessionExpiryValueInMinutes*60'操作中的潜在溢出
注意:TimeSpan.TotalMilliseconds属性是double数据类型
码
public void IsSessionExpired(Int16 sessionExpiryValueInMinutes)
{
if (sessionExpiryValueInMinutes > (double.MaxValue) / 60000)
{
//Overflow check
throw new ArgumentOutOfRangeException("sessionExpiryValueInMinutes");
}
else
{
//int milliSecondsValue = sessionExpiryValueInMinutes * 60 * 1000;
DateTime lastAccessTime = new DateTime(2013, 1, 1);
TimeSpan elapsedTime = (DateTime.Now - lastAccessTime);
if (elapsedTime.TotalMilliseconds > (sessionExpiryValueInMinutes * 60 * 1000))
{
bool isTimeExpired = true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
参考
您可以将计算包装在一个checked块中.这样,程序将明确地抛出一个System.OverflowException你可以在这里抓住你做你想要的东西.而且既然你想要抛出异常,在你的特定情况下,你不需要做任何其他事情.
例:
checked
{
if (elapsedTime.TotalMilliseconds > (sessionExpiryValueInMinutes * 60 * 1000))
{
bool isTimeExpired = true;
}
}
Run Code Online (Sandbox Code Playgroud)
而@Oded是对的,FxCop不能总是那么聪明.