删除arrayList中的元素后出现InvalidOperationException

时间:2012-10-20 11:08:30

标签: c#

您好我正在尝试从arrayList中删除所有可被2整除的数字。问题是在删除一个元素后,我得到一个InvalidOperationException。

   private ArrayList RemoveDivTwo(ArrayList list) {
        int count = 0;
        foreach(int i in list){
            if ((i > 2) && (i % 2 == 0)) {
                list.RemoveAt(count); 
            }
            count++;
        }

        return list;
    }

我怎样才能解决这个问题,所以我不会得到一个例外,并且能够删除所有可被2整除的元素?

3 个答案:

答案 0 :(得分:2)

尝试以这种方式迭代。

for(int i = 0; i < list.Count(); i++){
   if ((list[i] > 2) && (list[i] % 2 == 0)) {
                list.RemoveAt(i); 
                i--; //as offsets have shifted by one due to removal
            }
}

您不再迭代列表。所以这应该有用。

答案 1 :(得分:1)

引发异常是因为,foreach循环在开始迭代项列表之前调用collectionName.GetEnumerator方法。除非您在集合上启动新的foreach循环,否则不会再次调用GetEnumerator。该列表不能在foreach循环内修改,仅适用于列表上的只读操作。

您可以使用for循环进行迭代以及修改列表中的元素。

答案 2 :(得分:1)

我甚至不打算删除元素。只需将您想要的元素作为新列表返回:

List<int> RemoveDivTwo(List<int> list) {
    return list.Where(i => i % 2 == 1 || i <= 2).ToList();
}