2012-07-28 88 views
1

自从我把我的项目从7.0转换到7.1之后,我一直在收到非常奇怪的错误。例如:超出范围的异常,但索引在范围内! WP 7.1

List<bool> locks = new List<bool>(11); 
locks[0] = true; 

它抛出一个参数超出范围例外的第二行,但是当我把我的鼠标上的锁就说明它有11个元素所有这一切都被初始化为false。

+0

不要使用wp7开发太多,但除非它使用比完整版本的.NET稍微不同的List 版本,否则您会遇到超范围异常,因为构造函数过载列表(Int32)不会添加许多元素。它只是将类内的backing数组初始化为11个元素。所以你打电话索引0还不存在 – psubsee2003 2012-07-28 19:18:26

+0

我以为我在其他地方使用了相同的代码,它的工作,但回头看我以前使用添加。 你说得对。我想我很困惑,因为它显示列表中有11个布尔值对象,而不是11个空值。 – jolyrojr 2012-07-28 19:39:39

+0

是的,我只是在Silverlight框架中查找List ,行为与.NET 4.0相同。我会让我的评论成为答案 – psubsee2003 2012-07-28 19:41:32

回答

4

我刚刚在Silverlight框架中查找了List<T>的MSDN条目。如果您发布的代码是您的确切代码,您将获得ArgumentOutOfRangeException,因为索引不存在。

你的构造List<bool> locks = new List<bool>(11);创造与0元素的新名单,但11

当你调用locks[0] = true;,您试图访问不被被添加到一个元素的初始容量,所以异常被抛出。

根据你的评论,它看起来像你在列表中看到11布尔的。除非你在两行之间有更多的代码,否则这是不可能的。

使用调试器,如果您深入挖掘对象,您将看到List<bool>的支持数组,其中将有11个元素。但List本身没有任何元素。您可以通过致电List.Count

来轻松验证此功能,并且您永远不会在任何地方看到null为bool值。 bool是一个默认值为false的值类型,这就是为什么支持数组显示11个元素都是false的原因。