Мне просто интересно, что происходит при звонке .ToList()
на IEnumerable
в C#. Действительно ли элементы копируются в полностью новые дублированные элементы в куче или новый список просто ссылается на оригинальные элементы в куче?Влияние IEnumerable.ToList()
Мне интересно, потому что кто-то сказал мне, что это дорого назвать ToList, тогда как если просто назначить существующие объекты новому списку, это легкий вызов.
Я написал эту скрипку https://dotnetfiddle.net/s7xIc2 Просто проверяет хэш-код достаточно, чтобы знать?
Конечно, есть сценарии, где будут проблемы. Меня больше интересует механика того, производится ли копия предметов. Соображения относительно размера списка - это еще одно обсуждение. –
Большинство .Net-кода общедоступны - поэтому http://referencesource.microsoft.com должно быть ваше первое место, чтобы проверить, какой именно звонок ... И чем просить разъяснения по частям вы не понимаете. –
'.ToArray()' немного дешевле с точки зрения памяти. Он усекает перед возвращением. '.ToList()' поддерживает буфер мощности, который часто превышает длину фактического списка. – Enigmativity