A new feature in C# / .NET 4.0 is that you can change your enumerable in a foreach
without getting the exception. See Paul Jackson\'s blog entry An Interest
To add to Timo's answer LINQ can be used like this as well:
items = items.Select(i => {
...
//perform some logic adding / updating.
return i / return new Item();
...
//To remove an item simply have logic to return null.
//Then attach the Where to filter out nulls
return null;
...
}).Where(i => i != null);