我有以下代码,它将数字乘以60000,将分钟转换为毫秒。我已经实现了溢出检查,如下所示。我仍然得到以下代码分析交战。如何克服这个警告而不压制它?
警告:CA2233:纠正操作中的潜在溢出&session;会话超过百分比* 60' in' ApplicationSessionDAL.IsSessionExpired(短)'
注意:TimeSpan.TotalMilliseconds Property属于double
数据类型
CODE
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;
}
}
}
参考
答案 0 :(得分:5)
您可以将计算包装在checked
块中。这样,程序将显式抛出一个System.OverflowException
,您可以在这里抓住它来做你想要的。而且,既然你想要抛出异常,在你的特定情况下,你不需要做任何其他事情。
示例:
checked
{
if (elapsedTime.TotalMilliseconds > (sessionExpiryValueInMinutes * 60 * 1000))
{
bool isTimeExpired = true;
}
}
@Oded是对的,FxCop不能总是那么聪明。
答案 1 :(得分:0)
我不确定,但我怀疑这意味着(sessionExpiryValueInMinutes * 60 * 1000)的结果永远不会保留在Int16中。
我看到你的代码存在另一个问题:我几乎可以肯定sessionExpiryValueInMinutes是一个Int16,永远不会大于(double.MaxValue)/ 60000。