在我编写的冗长代码中有一个按钮单击事件。我有一个对象列表。每次单击按钮时,都应修改列表(例如,应删除某些项目),然后使用 foreach 循环进行迭代。
List<Person> lp=new List<Person>();
lp.RemoveAt(2);
foreach(Person j in lp)
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
当我尝试执行上述代码时,会导致异常。
InvalidOperationException : 集合被修改;枚举操作可能无法执行。
我在互联网上找到了一些解决方案并尝试了它们。其中之一是,
foreach(Person j in lp.ToList())
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
但没有什么可以阻止异常。
有人可以帮忙吗?
Dmi*_*try 11
显然,您的do something
代码正在尝试修改集合。
在迭代时修改集合通常是一个坏主意。
你可以做什么:
将集合复制到另一个。
foreach(Person j in lp.ToArray())
Run Code Online (Sandbox Code Playgroud)
或者
foreach(Person j in new List<Person>(lp))
Run Code Online (Sandbox Code Playgroud)使用修改项目的临时集合。
List<Person> itemsToDoSomething = new List<Person>();
foreach(Person j in lp)
itemsToDoSomething.Add(j);
Run Code Online (Sandbox Code Playgroud)
然后应用所需的操作。例如,从集合中删除项目:
lp.RemoveAll(item => itemsToDoSomething.Contains(item));
Run Code Online (Sandbox Code Playgroud) 归档时间: |
|
查看次数: |
22104 次 |
最近记录: |