溢出检查不起作用

LCJ*_*LCJ 2 .net c#

我有以下代码,其中数字乘以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)

参考

  1. 为什么FxCop警告此C#代码中的溢出(CA2233)?

Jal*_*ayn 5

您可以将计算包装在一个checked块中.这样,程序将明确地抛出一个System.OverflowException你可以在这里抓住你做你想要的东西.而且既然你想要抛出异常,在你的特定情况下,你不需要做任何其他事情.

例:

checked 
{
    if (elapsedTime.TotalMilliseconds > (sessionExpiryValueInMinutes * 60 * 1000))
    {
        bool isTimeExpired = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

而@Oded是对的,FxCop不能总是那么聪明.