如何迭代和更新列表

时间:2011-04-06 04:35:35

标签: c# .net

我经常遇到这个问题,如果我迭代一个列表,并在过程中修改它会导致异常。

List<string> list = new List<string>()
                                {
                                    "one",
                                    "two",
                                    "three"
                                };

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

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

6 个答案:

答案 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中的“迭代”。