我正在尝试从列表中删除一项,直到列表为空。我的代码仅成功从列表中删除了一项,然后导致错误。我该如何解决?
public void ReleaseAllAnimals()
{
int i = 0;
foreach (var value in _farmAnimals)
{
_farmAnimals.RemoveAt(i);
Console.WriteLine(value.Species());
i++;
}
}
答案 0 :(得分:0)
枚举时不应修改集合。当您要删除元素时,应使用for循环而不是索引器,以免遇到问题。
您可以按相反的顺序遍历列表,并从结尾项中逐个删除:
for(int i=_farmAnimals.Count -1; i >= 0; i--)
{
var species = _farmAnimals[i].Species(); // get species of current item
_farmAnimals.RemoveAt(i); // remove from list
Console.WriteLine(species); // display it
}
答案 1 :(得分:0)
您可以使用RemoveAt(0)
将代码更改为此:
int size = _farmAnimals.Count;
for(int i = 0; i < size; i++)
{
var s = _farmAnimals[0].Species();
Console.WriteLine(s);
_farmAnimals.RemoveAt(0);
}
希望对您有帮助