我经常遇到这个问题,如果我迭代一个列表,并在过程中修改它会导致异常。
List<string> list = new List<string>()
{
"one",
"two",
"three"
};
foreach (string item in list)
{
if (item == "two")
{
list.Remove(item);
}
}
我提出了自己的解决方案,但有兴趣听取您的解决方案。
答案 0 :(得分:3)
在这种情况下你可以使用linq:
list = list.Where(s => s != "two").ToList();
很长的路要走,就是建立第二个要删除的项目列表,然后遍历该列表,从第一个列表中删除项目。以下是一些示例代码:
请注意,我强烈建议使用简单的Linq解决方案,而不是这样做,但如果由于某种原因Linq不适合你,这应该有效:
List<string> toRemove = new List<string>();
foreach (string item in list)
{
if (item == "two")
{
toRemove.Add(item);
}
}
foreach(string item in toRemove)
{
list.Remove(item);
}
答案 1 :(得分:1)
一个简单的解决方案涉及LINQ。
var filtered = list.Where(s => s != "two").ToList();
答案 2 :(得分:1)
while (list.Contains("two"))
list.Remove("two");
答案 3 :(得分:1)
答案是你不应该修改你正在迭代的列表中的元素。
此外,您可以使用list.Remove(“two”);
更简单地完成此操作答案 4 :(得分:1)
另一个实现
list.ForEach(l => { if (l == "two") list.Remove(l); });
答案 5 :(得分:0)
list.RemoveAll(s => s == "two");
请注意,在返回s == "two"
之前,这确实允许额外处理 - OP中的“迭代”。