-1
我有一個列表被傳遞到foreach循環中,該列表從列表中刪除0個或更多項目。根據條件,列表可能會被完全清空,導致空引用錯誤。處理這種情況的最好方法是什麼?對象在foreach循環中清空
foreach (Item i in items)
{
if (i.property == condition)
{
items.Remove(i);
}
}
我有一個列表被傳遞到foreach循環中,該列表從列表中刪除0個或更多項目。根據條件,列表可能會被完全清空,導致空引用錯誤。處理這種情況的最好方法是什麼?對象在foreach循環中清空
foreach (Item i in items)
{
if (i.property == condition)
{
items.Remove(i);
}
}
使用List.RemoveAll方法
items.RemoveAll(i => i.property == condition)
它消除所有匹配由指定 謂詞所定義的條件的元素。
您還可以保留原來的列表(或其他徵收),而無需創建項目新的列表,其匹配條件不變(有時可能是有用的)
var newItems = items.Where(i => i.property != condition).ToList();
您不能修改您所列舉的序列。你是如何完全清空物品清單的? –
我想不出任何我知道的語言,當你嘗試從你正在迭代的東西中移除元素時,它可以正常工作。雖然有很多方法可以做到這一點,從'items.RemoveAll',克隆列表,迭代一個並從另一個刪除,存儲索引和刪除循環後的元素。 – Andrew