Does
foreach(T value in new List(oldList) )
is dangerous (costly) when oldList contains 1 millions of object T ?
More g
The general rule is, you should not modify the same collection in which you are enumerating. If you want to do something like that, keep another collection which will keep track of which elements to add/remove from the original collection and then after exiting from the loop, perform the add/remove operation on the original collection.