删除arrayList中的元素后出现InvalidOperationException

您好我正在尝试从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整除的元素?

尝试以这种方式迭代它。

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

您不再迭代列表。 所以这应该工作。

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

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

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

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