遍历列表时如何防止超出范围异常

how to prevent out of range exception when looping through a list

当使用 IList 集合时,有没有办法防止像这样的错误?

System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.

我有一个这样定义的 IList:

 IList<PlantType> plants

在这个循环中使用:

     while ( plants[position].cellA + HalfLife >= plants[position + 1].CellZ)
     {
         plantName = plantName + ";" + plants[position].Name;
         position++;

     }

但是,在它试图继续循环超出列表长度后,我得到了上面提到的错误。

再看一遍,不知是不是因为while循环中的这个条件:

position + 1

因为如果循环已经在列表中的最后一个成员上,并且它试图获取 (position + 1) 的 CellZ 属性,那么它可能会生成我看到的错误。

所以我想知道是否有办法解决这个问题?

谢谢!

请记住,列表的索引从 0 开始,但列表的计数只是告诉您列表中有多少项,因此包含 100 个项目的列表只能转到列表[99]。如果您尝试获取位置 >= plants.Count ,您将获得索引超出范围。要解决此问题,您需要添加一个中断条件以在 position >= plants.Count:

时停止循环
 while (position < plants.Count && plants[position].cellA + HalfLife >= plants[position + 1].CellZ)
 {
     plantName = plantName + ";" + plants[position].Name;
     position++;
 }