如何迭代和更新列表
我有这个问题很多时间,如果我迭代一个列表,并在过程中修改它导致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"
。