Es wird nicht notwendigerweise iteriert, obwohl dies das "worst case" -Szenario ist. Im Grunde ruft es new List<T>(source)
auf, aber das hat einige Tricks im Ärmel: Wenn die Quelle ICollection<T>
implementiert, kann der Konstruktor ICollection<T>.CopyTo()
, um die vollständigen Daten in ein Array zu kopieren. Dies kann durchaus effizienter als eine Iteration mit einem Schritt ausgeführt werden. In ähnlicher Weise kennt die neue Liste im Fall von ICollection<T>
die endgültige Größe, mit der sie beginnen soll, so dass sie ihre internen Puffer nicht weiter erweitern muss.
Für ein paar weitere Details, siehe meine Edulinq ToList()
Blogpost .