2010-06-09 46 views
0

例如,让我们使用ArrayList类的Add方法。如果我在未检查算术溢出的Visual Studio C#项目中使用默认编译器设置,如果我添加了太多项目,ArrayList.Add()是否会抛出OverflowException?周围的方法调用checkedunchecked有什么区别?通常在.Net框架方法中检查算术溢出/下溢吗?

顺便说一句,我会写一个测试程序来确定这个问题的答案,如果我现在可以使用Visual Studio。

+0

你打算怎么溢出ArrayList.Add()?通过添加比Array.LongLength更多的元素? – 2010-06-09 22:51:13

+0

@Matt Greer。是的,或者我认为的那样。 – YWE 2010-06-09 23:39:18

+0

这就是9,223,372,036,854,775,807元素:)我不确定我会担心它。至少,在这种情况下,溢出可能会影响到其他地区的你。 – 2010-06-10 00:05:57

回答

2

通常,BCL不会在启用溢出检查的情况下运行。在您的应用程序中启用它将不会影响已编译的二进制文件,而只会影响您的代码。

想象一下,如果您可以控制BCL代码的执行方式,将会出现所有问题。每次创作算术表达式时,您都必须考虑如何在两种情况下都能正常工作,以获得100%可靠的代码。因为任何人都可以通过使用checked/unchecked块来更改语义。

想想你可以使用安全敏感API的所有乐趣,如果你可以关闭溢出检查他们希望它的功能。

+0

这是有道理的。所以你知道如果你试图添加比Int32.MaxValue更多的项目到数组列表会发生什么?我假设这是最大的,因为Add方法返回的Int32是添加项目的索引。 MSDN文档没有说。 – YWE 2010-06-10 00:07:57

0

其构建的选择,你可以改变它的解决方案设置(对应的复选框,clickibng)