如何迭代和更新列表
本文关键字:更新 列表 迭代 何迭代 | 更新日期: 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中的"迭代"。