您好我正在尝试从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整除的元素?
答案 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();
}