2017-02-16 114 views
-1

我有一個列表被傳遞到foreach循環中,該列表從列表中刪除0個或更多項目。根據條件,列表可能會被完全清空,導致空引用錯誤。處理這種情況的最好方法是什麼?對象在foreach循環中清空

foreach (Item i in items) 
{ 
    if (i.property == condition) 
    { 
     items.Remove(i); 
    } 
} 
+0

您不能修改您所列舉的序列。你是如何完全清空物品清單的? –

+0

我想不出任何我知道的語言,當你嘗試從你正在迭代的東西中移除元素時,它可以正常工作。雖然有很多方法可以做到這一點,從'items.RemoveAll',克隆列表,迭代一個並從另一個刪除,存儲索引和刪除循環後的元素。 – Andrew

回答

1

使用List.RemoveAll方法

items.RemoveAll(i => i.property == condition) 

它消除所有匹配由指定 謂詞所定義的條件的元素。

您還可以保留原來的列表(或其他徵收),而無需創建項目新的列表,其匹配條件不變(有時可能是有用的)

var newItems = items.Where(i => i.property != condition).ToList();