簡體   English   中英

無法從 C# 中的列表中刪除項目

[英]Can't remove item from list in C#

在我的游戲的庫存中,如果你放下它,我想刪除它。 這僅適用於像這樣的 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)
{
        items.Remove(itemToRemove);
}

沒發生什么事。 有誰知道如何解決這一問題?

要從列表中刪除項目,執行以下操作就足夠了:

public void DeleteItem(Item itemToRemove) 
{
  items.Remove(itemToRemove);
}

您實際上不必遍歷列表。 如果似乎什么也沒發生,請檢查Remove的返回值。 如果該項目已被刪除,則返回true如果在列表中找不到該項目,則返回false

關於您收到的錯誤消息:在枚舉列表時,不得通過添加/刪除項目來修改列表。 這會改變列表的長度,並拋出枚舉,所以這是不允許的。

該錯誤表明您在循環遍歷集合的同時正在更改它。 這是不安全的,因為一旦集合更改,迭代器狀態可能不再有效。 例如,迭代器可能指向列表中的索引 3,但如果您刪除項目 0(將其他所有內容移回),那么您最終會跳過。 拋出此錯誤通過使其顯而易見來避免這種微妙的錯誤。

在這種特殊情況下,您不需要循環:只需刪除該項目。

如果您想進行批量刪除,請考慮像 RemoveAll 這樣的方法。

另一種選擇是遍歷列表的副本,這樣您就可以自由地修改它。 例如,您可以遍歷 items.ToArray()。

附加了另一個腳本,如果我放下槍,它會直接將項目添加回來,所以這就是錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM