例如,讓我們使用ArrayList類的Add方法。如果我在未檢查算術溢出的Visual Studio C#項目中使用默認編譯器設置,如果我添加了太多項目,ArrayList.Add()是否會拋出OverflowException?周圍的方法調用checked
或unchecked
有什麼區別?通常在.Net框架方法中檢查算術溢出/下溢嗎?
順便說一句,我會寫一個測試程序來確定這個問題的答案,如果我現在可以使用Visual Studio。
例如,讓我們使用ArrayList類的Add方法。如果我在未檢查算術溢出的Visual Studio C#項目中使用默認編譯器設置,如果我添加了太多項目,ArrayList.Add()是否會拋出OverflowException?周圍的方法調用checked
或unchecked
有什麼區別?通常在.Net框架方法中檢查算術溢出/下溢嗎?
順便說一句,我會寫一個測試程序來確定這個問題的答案,如果我現在可以使用Visual Studio。
通常,BCL不會在啓用溢出檢查的情況下運行。在您的應用程序中啓用它將不會影響已編譯的二進制文件,而只會影響您的代碼。
想象一下,如果您可以控制BCL代碼的執行方式,將會出現所有問題。每次創作算術表達式時,您都必須考慮如何在兩種情況下都能正常工作,以獲得100%可靠的代碼。因爲任何人都可以通過使用checked
/unchecked
塊來更改語義。
想想你可以使用安全敏感API的所有樂趣,如果你可以關閉溢出檢查他們希望它的功能。
這是有道理的。所以你知道如果你試圖添加比Int32.MaxValue更多的項目到數組列表會發生什麼?我假設這是最大的,因爲Add方法返回的Int32是添加項目的索引。 MSDN文檔沒有說。 – YWE 2010-06-10 00:07:57
其構建的選擇,你可以改變它的解決方案設置(對應的複選框,clickibng)
你打算怎麼溢出ArrayList.Add()?通過添加比Array.LongLength更多的元素? – 2010-06-09 22:51:13
@Matt Greer。是的,或者我認爲的那樣。 – YWE 2010-06-09 23:39:18
這就是9,223,372,036,854,775,807元素:)我不確定我會擔心它。至少,在這種情況下,溢出可能會影響到其他地區的你。 – 2010-06-10 00:05:57