如何迭代和更新列表

本文关键字:更新 列表 迭代 何迭代 | 更新日期: 2023-09-27 17:48:59

随着时间的推移,我遇到过很多这样的问题,如果我迭代一个列表,并在此过程中修改该列表,就会导致异常。

List<string> list = new List<string>()
                                {
                                    "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<string> toRemove = new List<string>();
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.ForEach(l => { if (l == "two")  list.Remove(l); });
list.RemoveAll(s => s == "two");

请注意,这确实允许在返回s == "two"之前进行额外的处理——OP中的"迭代"。