集合已修改; ArrayList 中不能执行枚举操作
我试图从 ArrayList
中删除一个项目,但出现此异常:集合已修改;枚举操作可能无法执行。
有什么想法吗?
I'm trying to remove an item from an ArrayList
and I get this Exception:Collection was modified; enumeration operation may not execute.
Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
您正在
foreach
期间删除该项目,是吗?很简单,你不能。这里有一些常见的选项:List
和RemoveAll
以及谓词按索引向后迭代,删除匹配项
使用
foreach
,并将匹配项放入第二个列表中;现在枚举第二个列表并从第一个列表中删除这些项目(如果您明白我的意思)You are removing the item during a
foreach
, yes? Simply, you can't. There are a few common options here:List<T>
andRemoveAll
with a predicateiterate backwards by index, removing matching items
use
foreach
, and put matching items into a second list; now enumerate the second list and remove those items from the first (if you see what I mean)这是一个示例(对于任何拼写错误,我们深表歉意)
或者如果您使用的是 3.5,Linq 会使第一步变得更容易:
将“...”替换为确定是否应删除项目的条件。
Here's an example (sorry for any typos)
OR if you're using 3.5, Linq makes the first bit easier:
Replace "..." with your condition that determines if item should be removed.
一种方法是将要删除的项目添加到新列表中。然后检查并删除这些项目。
One way is to add the item(s) to be deleted to a new list. Then go through and delete those items.
我喜欢使用
for
循环向后迭代,但这与foreach
相比可能会变得乏味。我喜欢的一种解决方案是创建一个向后遍历列表的枚举器。您可以将其实现为ArrayList
或List
上的扩展方法。 ArrayList 的实现如下。List
的实现类似。下面的示例使用枚举器从 ArrayList 中删除所有偶数。
I like to iterate backward using a
for
loop, but this can get tedious compared toforeach
. One solution I like is to create an enumerator that traverses the list backward. You can implement this as an extension method onArrayList
orList<T>
. The implementation forArrayList
is below.The implementation for
List<T>
is similar.The example below uses the enumerator to remove all even integers from an
ArrayList
.不要在迭代列表的循环内修改列表。
相反,使用带有索引的
for()
或while()
,向后浏览列表。 (这将使您可以删除内容而不会获得无效索引。)Don't modify the list inside of a loop which iterates through the list.
Instead, use a
for()
orwhile()
with an index, going backwards through the list. (This will let you delete things without getting an invalid index.)我错过了什么吗?如果我错了,有人纠正我。
Am I missing something? Somebody correct me if I'm wrong.
使用带有数字索引的 for() 循环代替 foreach()。
Instead of foreach(), use a for() loop with a numeric index.
我同意我在这篇文章中读到的几个观点,并且我已将它们合并到我的解决方案中,以解决与原始帖子完全相同的问题。
也就是说,我欣赏的评论是:
“除非您使用 .NET 1.0 或 1.1,否则请使用
List
而不是ArrayList
。”"另外,将项目添加到删除到新列表,然后浏览并删除这些项目。”
..就我而言,我刚刚创建了一个新列表并用有效数据值填充它。
例如
I agree with several of the points I've read in this post and I've incorporated them into my solution to solve the exact same issue as the original posting.
That said, the comments I appreciated are:
"unless you are using .NET 1.0 or 1.1, use
List<T>
instead ofArrayList
. ""Also, add the item(s) to be deleted to a new list. Then go through and delete those items."
.. in my case I just created a new List and the populated it with the valid data values.
e.g.
使用 ArrayList 你也可以尝试这样
using
ArrayList
also you can try like this