我有以下函数来获得从高字节和低字节的int:为什么FxCop在这个C#代码中有关溢出(CA2233)的警告?
public static int FromBytes(byte high, byte low)
{
return high * (byte.MaxValue + 1) + low;
}
当我分析组件,的FxCop,我得到以下严重警告:
CA2233:操作不应该溢出
如果不首先验证 操作数以防止溢出,则算术运算不应该为 。
我看不出这可能会溢出,所以我只是假设FxCop是过度热情。
我错过了什么吗?并且可以采取哪些措施来纠正我所拥有的(或者至少让FxCop警告消失!)?
我打赌是在“byte.MaxValue + 1”部分。 – Pwninstein 2010-04-15 01:36:27
您的投注是错误的。他的代码不会导致溢出,因为在添加步骤发生之前,byte.MaxValue总是隐式转换为int。 - 任何时候,一个方法执行一个算术运算,并且不事先验证操作数(以防止溢出),您将得到CA2233。有很多关于如何在MSDN上修复此问题的示例,地址为:http://msdn.microsoft.com/en-us/library/ms182354.aspx – BrainSlugs83 2012-01-09 04:43:57
阅读http://msdn.microsoft.com/en-us/library/ ms182354.aspx – Lijo 2012-11-19 07:27:59