1

嗨,我正在尝试从 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;
    }

我怎样才能解决这个问题,这样我就不会得到异常并且能够删除所有可被二整除的元素?

4

3 回答 3

3

尝试以这种方式迭代它。

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
            }
}

您不再遍历列表。所以这应该有效。

于 2012-10-20T11:13:20.793 回答
1

抛出异常的原因是,foreach 循环在开始遍历项目列表之前调用了 collectionName.GetEnumerator 方法。除非您在集合上启动新的 foreach 循环,否则不会再次调用 GetEnumerator。该列表不能在 foreach 循环内修改,它仅用于列表上的只读操作。

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

于 2012-10-20T11:36:47.223 回答
1

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

List<int> RemoveDivTwo(List<int> list) {
    return list.Where(i => i % 2 == 1 || i <= 2).ToList();
}
于 2012-10-20T14:04:28.593 回答