无法从 C# 中的列表中删除项目

sur*_*men 0 c# list unity-game-engine

在我的游戏的库存中,如果你放下它,我想删除它。这仅适用于像这样的 foreach 循环:

public List<Item> items = new List<Item>();

public void DeleteItem(Item itemToRemove)
{
    foreach (var item in items)
    {
        items.Remove(itemToRemove);
    }
}
Run Code Online (Sandbox Code Playgroud)

但后来我收到了这个错误:

集合被修改;枚举操作可能无法执行。

当我尝试这个时:

public void DeleteItem(Item itemToRemove)
{
        items.Remove(itemToRemove);
}
Run Code Online (Sandbox Code Playgroud)

没发生什么事。有谁知道如何解决这一问题?

Ale*_*ijk 6

要从列表中删除项目,执行以下操作就足够了:

public void DeleteItem(Item itemToRemove) 
{
  items.Remove(itemToRemove);
}
Run Code Online (Sandbox Code Playgroud)

您实际上不必遍历列表。如果似乎什么也没发生,请检查Remove的返回值。true如果该项目已被删除,或者false在列表中找不到该项目,则它会返回。

关于您收到的错误消息:在枚举列表时,不得通过添加/删除项目来修改列表。这将改变列表的长度,并抛出枚举,所以这是不允许的。

  • 请检查“items.Remove”的返回值。如果为“false”,则该项目不在列表中。另外,请确保您实际上正在尝试删除项目的同一实例,而不是恰好具有相同值的新实例。 (2认同)