C# - 集合已修改;枚举操作可能无法执行
C# - Collection was modified; enumeration operation may not execute
在我写的很长的代码中有一个按钮点击事件。我有一个对象列表。每次单击按钮时,都应修改列表(例如,应删除某些项目),然后使用 foreach 循环进行迭代。
List<Person> lp=new List<Person>();
lp.RemoveAt(2);
foreach(Person j in lp)
{
// do something
}
当我尝试执行上面的代码时,出现异常。
InvalidOperationException:集合已修改;枚举操作可能无法执行。
在网上找了一些解决办法,试了一下。其中之一是,
foreach(Person j in lp.ToList())
{
// do something
}
但是没有什么可以阻止异常。
有人可以帮忙吗?
尝试修改克隆列表并将引用复制回来(只是一个想法):
List<Person> newList = new List<Person>(lp);lp = newList;
基本上不允许在遍历列表时修改它
显然,您的 do something
代码正在尝试修改集合。
在迭代集合时修改集合通常不是一个好主意。
你能做什么:
将集合复制到另一个。
foreach(Person j in lp.ToArray())
或
foreach(Person j in new List<Person>(lp))
使用修改项的临时集合。
List<Person> itemsToDoSomething = new List<Person>();
foreach(Person j in lp)
itemsToDoSomething.Add(j);
然后应用所需的操作。例如,从集合中删除项目:
lp.RemoveAll(item => itemsToDoSomething.Contains(item));
在我写的很长的代码中有一个按钮点击事件。我有一个对象列表。每次单击按钮时,都应修改列表(例如,应删除某些项目),然后使用 foreach 循环进行迭代。
List<Person> lp=new List<Person>();
lp.RemoveAt(2);
foreach(Person j in lp)
{
// do something
}
当我尝试执行上面的代码时,出现异常。
InvalidOperationException:集合已修改;枚举操作可能无法执行。
在网上找了一些解决办法,试了一下。其中之一是,
foreach(Person j in lp.ToList())
{
// do something
}
但是没有什么可以阻止异常。
有人可以帮忙吗?
尝试修改克隆列表并将引用复制回来(只是一个想法):
List<Person> newList = new List<Person>(lp);lp = newList;
基本上不允许在遍历列表时修改它
显然,您的 do something
代码正在尝试修改集合。
在迭代集合时修改集合通常不是一个好主意。
你能做什么:
将集合复制到另一个。
foreach(Person j in lp.ToArray())
或
foreach(Person j in new List<Person>(lp))
使用修改项的临时集合。
List<Person> itemsToDoSomething = new List<Person>(); foreach(Person j in lp) itemsToDoSomething.Add(j);
然后应用所需的操作。例如,从集合中删除项目:
lp.RemoveAll(item => itemsToDoSomething.Contains(item));