自从我将项目从7.0转换为7.1后,我一直遇到非常奇怪的错误。例如:
List<bool> locks = new List<bool>(11);
locks[0] = true;
它会在第二行抛出一个超出范围异常的参数,但当我将鼠标放在锁上时,它会显示它有11个元素,所有这些元素都被初始化为false。
答案 0 :(得分:5)
我刚刚在Silverlight Framework中查找了List<T>
的MSDN条目。如果您发布的代码是您的确切代码,那么您将获得ArgumentOutOfRangeException
,因为该索引不存在。
您的构造函数List<bool> locks = new List<bool>(11);
正在创建一个包含0个元素的新List,但初始容量为11。
当您调用locks[0] = true;
时,您正在尝试访问尚未添加的元素,因此会抛出异常。
根据你的评论,看起来你在列表中看到了11个bool。除非在两行之间有更多代码,否则这是不可能的。
使用调试器,如果深入挖掘对象,您将看到List<bool>
的后备数组,它将包含11个元素。但List
本身没有任何元素。您可以通过致电List.Count
你永远不会在任何地方看到null
的bool值。 bool
是一个默认值为false的值类型,这就是后备数组显示11个元素全为false的原因。