gpt4 book ai didi

c# - 溢出检查不起作用

转载 作者:行者123 更新时间:2023-12-02 22:16:25 25 4
gpt4 key购买 nike

我有以下代码,其中有一个数字乘以 60000 以将分钟转换为毫秒。我已经实现了溢出检查,如下所示。我仍然收到以下代码分析交战。如何克服这个警告而不抑制它?

Warning: CA2233: Correct the potential overflow in the operation 'sessionExpiryValueInMinutes*60' in 'ApplicationSessionDAL.IsSessionExpired(short)'

备注:TimeSpan.TotalMilliseconds Propertydouble数据类型

代码

    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;
}

}

}

引用文献

  1. Why is FxCop warning about an overflow (CA2233) in this C# code?

最佳答案

您可以将计算包装在 checked 中堵塞。这样,该程序将显式抛出一个 System.OverflowException,您可以在此处捕获它以执行您想要的操作。由于无论如何您都想抛出异常,因此在您的特定情况下,您无需执行任何其他操作。

例子:

checked 
{
if (elapsedTime.TotalMilliseconds > (sessionExpiryValueInMinutes * 60 * 1000))
{
bool isTimeExpired = true;
}
}

@Oded 是对的,FxCop 不可能总是那么聪明。

关于c# - 溢出检查不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14377437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com