2017-02-16 112 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();