Просто из любопытства, почему вызов IEnumerable.ToList() на существующем List не возвращает тот же экземпляр? То же самое относится к IEnuerable.ToArray(). Разве это не лучше с точки зрения потребления памяти?
Я провел следующий быстрый тест:
var things= new List<Thing>( new [] {new Thing(), new Thing()});
Console.WriteLine(things.GetHashCode());
things= things.ToList();
Console.WriteLine(things.GetHashCode());
И я получаю разные экземпляры объектов. Почему не просто одинаковые экземпляры?