C# Can';t在C中从列表中删除项#

C# Can';t在C中从列表中删除项#,c#,list,unity3d,C#,List,Unity3d,在我的游戏清单中,如果你扔了一个物品,我想删除它。这仅适用于以下foreach循环: public List<Item> items = new List<Item>(); public void DeleteItem(Item itemToRemove) { foreach (var item in items) { items.Remove(itemToRemove); } } 什么也没发生。有人知道如何解决此问题吗?要从列

在我的游戏清单中,如果你扔了一个物品,我想删除它。这仅适用于以下foreach循环:

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

public void DeleteItem(Item itemToRemove)
{
    foreach (var item in items)
    {
        items.Remove(itemToRemove);
    }
}

什么也没发生。有人知道如何解决此问题吗?

要从列表中删除项目,只需执行以下操作即可:

public void DeleteItem(Item itemToRemove)
{
项目。删除(项目删除);
}
实际上,您不必在列表中循环。如果似乎什么也没有发生,请检查的返回值。如果项目已删除,则返回
true
;如果在列表中找不到该项目,则返回
false


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

该错误表示在循环集合的同时更改集合。这是不安全的,因为一旦集合更改,迭代器状态可能不再有效。例如,迭代器可能指向列表中的索引3,但如果删除项0(将所有其他项移回),则最终将跳过前面的内容。抛出此错误可以通过使其变得明显来避免这种微妙的错误

在这种特殊情况下,不需要循环:只需删除该项即可

如果要进行批量移除,请考虑像RemoveAll这样的方法。


另一个选项是循环列表的副本,这样您就可以自由修改它。例如,您可以在items.ToArray()上循环。

附加了另一个脚本,如果我放下枪,它会直接将该项目添加回,因此这就是错误。

您不需要循环。如果列表中存在,只需将其删除即可。我也看不出这两个片段有什么不同posted@SamiKuhmonen对不起,我忘记更改第二个代码了。如果没有循环,由于某种原因它将无法工作,您知道原因吗?您可能知道如何修复此错误:枚举操作可能无法执行。您确定该项在列表中只存在一次吗?检查,删除方法是否返回true或false,或者在删除之前和之后检查items.Count()。这个问题与我已经尝试过这个方法,但没有发生任何问题,您是否知道如何修复错误,因为我的脚本工作正常,只有错误非常烦人。哦,那么如何检查返回值呢?检查
项的返回值。删除
。如果为
false
,则该项不在列表中。另外,请确保您实际上正在尝试删除项目的同一个实例,而不是恰好具有相同值的新实例。谢谢您的帮助,但我忘记了另一个脚本,所以它不起作用。
public void DeleteItem(Item itemToRemove)
{
        items.Remove(itemToRemove);
}