猿问

集合已修改;枚举操作可能不在ArrayList中执行

我正在尝试从中删除一个项目,但出现ArrayList此异常:

Collection was modified; enumeration operation may not execute.


有任何想法吗?


弑天下
浏览 474回答 3
3回答

catspeake

您在期间要删除商品foreach,是吗?简单地说,你做不到。这里有一些常用选项:使用List<T>并RemoveAll与谓语按索引向后迭代,删除匹配项for(int i = list.Count - 1; i >= 0; i--) {&nbsp; &nbsp; if({some test}) list.RemoveAt(i);}使用foreach,并将匹配项放入第二个列表中;现在枚举第二个列表,并从第一个列表中删除那些项目(如果您明白我的意思)

喵喵时光机

这是一个例子(对错别字表示抱歉)var itemsToRemove = new ArrayList();&nbsp; // should use generic List if you canforeach (var item in originalArrayList) {&nbsp; if (...) {&nbsp; &nbsp; itemsToRemove.Add(item);&nbsp; }}foreach (var item in itemsToRemove) {&nbsp; originalArrayList.Remove(item);}或者,如果您使用的是3.5,Linq可使第一步变得容易:itemsToRemove = originalArrayList&nbsp; .Where(item => ...)&nbsp; .ToArray();foreach (var item in itemsToRemove) {&nbsp; originalArrayList.Remove(item);}将“ ...”替换为确定是否应删除项目的条件。
随时随地看视频慕课网APP
我要回答