C#一次从列表中删除一项

C#一次从列表中删除一项,c#,C#,我试图从列表中删除一项,直到列表为空。“我的代码”仅成功从列表中删除一项,然后导致错误。我该如何解决这个问题 public void ReleaseAllAnimals() { int i = 0; foreach (var value in _farmAnimals) { _farmAnimals.RemoveAt(i); Console.WriteLine(value.Species()); i++; } }

我试图从列表中删除一项,直到列表为空。“我的代码”仅成功从列表中删除一项,然后导致错误。我该如何解决这个问题

public void ReleaseAllAnimals()
{
    int i = 0;
    foreach (var value in _farmAnimals)
    {
        _farmAnimals.RemoveAt(i);
        Console.WriteLine(value.Species());
        i++;
    }
}

枚举集合时不应修改集合。当您想要移除元素时,您应该使用for循环来代替indexer,这样您就不会面临这个问题

您可以按相反顺序循环浏览列表,如,并从结束项中逐个删除:

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
}

您可以使用
RemoveAt(0)

将代码更改为:

int size = _farmAnimals.Count;
for(int i = 0; i < size; i++)
{
    var s = _farmAnimals[0].Species();
    Console.WriteLine(s);
    _farmAnimals.RemoveAt(0);
}
int size=\u farmAnimals.Count;
对于(int i=0;i

我希望它能帮助您

这是因为您正在使用foreach。从列表中删除任何项目后,列表的大小将减小1。这导致您面临异常。是否要从列表中删除所有项目是的,但要逐个删除,因为我希望能够打印删除的项目。反向循环的工作方式如下:
for(int I=\u farmanies.Count-1;I>=0;I--)
这将仅从4个项目的列表中删除2个项目。我已经试过这个代码了。一旦计数器(i)变为2,它将退出for循环。@krishnel它将逐个删除所有项我只是运行了你的代码,它只显示列表中4项中的2项(我自己已经写过了,但为了省心,我还是这么做了)。for语句只在前两次迭代中有效,第三次迭代将失败,因为我将变为3,列表计数将为2。这行不通,我100%正确。看起来很无辜,但失败了。@Krishnel你需要按相反的顺序循环,我更新了帖子。