I have code that I want to look like this:
List<Type> Os; ... foreach (Type o in Os) if (o.cond) return; // Quitting early is important for my case! else Os.Remove(o); ... // Other code
This doesn't work, because you cannot remove from the list when you are inside a foreach
loop over that list:
Is there a common way to solve the problem?
I can switch to a different type if needed.
Option 2:
List<Type> Os; ... while (Os.Count != 0) if (Os[0].cond) return; else Os.RemoveAt(0); ... // Other code
Ugly, but it should work.
You can't use . Remove(element) inside a foreach (var element in X) (because it results in Collection was modified; enumeration operation may not execute.
To remove element from array in forEach loop with JavaScript, we can use the array splice method. const review = ["a", "b", "c", "b", "a"]; review. forEach((item, index, arr) => { if (item === "a") { arr. splice(index, 1); } });
Even though java. util. ArrayList provides the remove() methods, like remove (int index) and remove (Object element), you cannot use them to remove items while iterating over ArrayList in Java because they will throw ConcurrentModificationException if called during iteration.
You can iterate through the list backwards:
for (int i = myList.Count - 1; i >= 0; i--) { if (whatever) myList.RemoveAt(i); }
In response to your comment about wanting to quit when you find an item that you're NOT removing, then just using a while loop would be the best solution.
You should never remove anything from a collection you are iterating over while inside of a foreach loop. It's basically like sawing the branch you are sitting on.
Use your while alternative. It is the way to go.
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