Duplicate
Modifying A Collection While Iterating Through It
Has anyone a nice pattern to allow me to get around the inability to remove objects while I loop through an enumerable collection (eg, an IList or KeyValuePairs in a dictionary)
For example, the following fails, as it modifies the List being enumerated over during the foreach
foreach (MyObject myObject in MyListOfMyObjects)
{
if (condition) MyListOfMyObjects.Remove(myObject);
}
In the past I have used two methods.
I have replaced the foreach with a reversed for loop (so as not to change the any indexes I am looping over if I remove an object).
I have also tried storing a new collection of objects to remove within to loop, then looping through that collection and removed the objects from the original collection.
These work fine, but neither feels nice, and I was wondering if anyone has come up with a more elegant solution to the issue