В реальном IEnumerable, который не может быть приведен ни к чему другому, что вы используете с помощью метода итератора yield return, ToArray
вызывает ToList
, не потому что ToList
быстрее, но более гибко, он подготовлен для обработки неизвестного количества данных. Мы должны избегать двукратного перечисления, что произойдет, если, например, использовать расширение Count()
.
ToArray () будет быстрее - если вы заранее знаете количество элементов. Это может быть в случае, если источником является ICollection
- фактически единственная идея ICollection
для поддержки этой функции - знание количества элементов в Advance.
Ваше измерение определено c чистым итераторам (с возвратом урожая). Если IEnumerable проверен на true, то есть Array
, IList
или ICollection
, он довольно преобразуется и используется собственная реализация List.CopyTo
и Array.CopyTo
. Они не перечисляют IEnumerable. Просто чтобы подчеркнуть: list.ToList () и list.ToArray () или int []. ToList () или int []. ToArray () не будут отображать это поведение
Я не могу объяснить возможные различия .NET / Core.