我有以下函數來獲得從高字節和低字節的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