1

自从我将项目从 7.0 转换为 7.1 后,我就遇到了非常奇怪的错误。例如:

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

它在第二行抛出一个参数超出范围异常,但是当我将鼠标放在锁上时,它显示它有 11 个元素,所有这些元素都初始化为 false。

4

1 回答 1

5

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

您的构造函数List<bool> locks = new List<bool>(11);正在创建一个包含 0 个元素的新列表,但初始容量为 11。

当您调用 时locks[0] = true;,您正在尝试访问尚未添加的元素,因此会引发异常。

根据您的评论,您似乎在列表中看到了 11 个布尔值。除非您在两行之间有更多代码,否则这是不可能的。

使用调试器,如果您深入研究对象,您将看到 的支持数组,该数组List<bool>将包含 11 个元素。但它List本身没有任何元素。您可以通过调用轻松验证这一点List.Count

而且你永远不会null在任何地方看到布尔值。 bool是一个默认值为 false 的值类型,这就是为什么后备数组显示 11 个元素全部为 false 的原因。

于 2012-07-28T19:41:49.443 回答