删除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(); }