如何迭代和更新列表

我有这个问题很多时间,如果我迭代一个列表,并在过程中修改它导致exception。

List list = new List() { "one", "two", "three" }; foreach (string item in list) { if (item == "two") { list.Remove(item); } } 

我提出了自己的解决方案,但有兴趣听听你的解决方案。

那么你可以在这种情况下使用linq:

 list = list.Where(s => s != "two").ToList(); 

要做的很长的路要是建立第二个要删除的项目列表,然后遍历该列表从第一个列表中删除项目。 这是一些示例代码:

请注意,我强烈建议使用简单的Linq解决方案,而不是这样做,但如果由于某种原因Linq不适合你,这应该工作:

 List toRemove = new List(); foreach (string item in list) { if (item == "two") { toRemove.Add(item); } } foreach(string item in toRemove) { list.Remove(item); } 

一个简单的解决方案涉及LINQ。

 var filtered = list.Where(s => s != "two").ToList(); 
 while (list.Contains("two")) list.Remove("two"); 

答案是你不应该修改你正在迭代的列表中的元素。

此外,您可以使用list.Remove(“two”)更简单地完成此操作;

另一个实现

 list.ForEach(l => { if (l == "two") list.Remove(l); }); 
 list.RemoveAll(s => s == "two"); 

注意这确实允许额外的处理 – OP中的“迭代” – 在返回s == "two"