I'm trying to remove an item from an ArrayList
and I get this Exception:Collection was modified; enumeration operation may not execute.
Any ideas?
You are removing the item during a foreach
, yes? Simply, you can't. There are a few common options here:
List<T>
and RemoveAll
with a predicateiterate backwards by index, removing matching items
for(int i = list.Count - 1; i >= 0; i--) { if({some test}) list.RemoveAt(i); }
use foreach
, and put matching items into a second list; now enumerate the second list and remove those items from the first (if you see what I mean)
Here's an example (sorry for any typos)
var itemsToRemove = new ArrayList(); // should use generic List if you can foreach (var item in originalArrayList) { if (...) { itemsToRemove.Add(item); } } foreach (var item in itemsToRemove) { originalArrayList.Remove(item); }
OR if you're using 3.5, Linq makes the first bit easier:
itemsToRemove = originalArrayList .Where(item => ...) .ToArray(); foreach (var item in itemsToRemove) { originalArrayList.Remove(item); }
Replace "..." with your condition that determines if item should be removed.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With