遍历列表时如何防止超出范围异常
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++;
}
当使用 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++;
}