Does
foreach(T value in new List(oldList) )
is dangerous (costly) when oldList contains 1 millions of object T ?
More g
foreach(T value in new List(oldList).ToList() ) - give a try