Через путешествие в StackOverflow есть много обыкновений методы ToList()
расширения за ICollection
(или классов, которые являются производными от ICollection<T>
).ли Список <T> .ToList() перечислить коллекцию
Я вытащил декомпилятор хорошего ol ', чтобы посмотреть, как выполняется метод расширения ToList()
, и он перечисляет коллекцию в любое время. Проходя через источник, я наткнулся на:
[__DynamicallyInvokable]
public static List<TSource> ToList<TSource>(this IEnumerable<TSource> source)
{
if (source == null)
{
throw Error.ArgumentNull("source");
}
return new List<TSource>(source);
}
Теперь это довольно прямо вперед, поэтому метод ToList()
расширения просто создает новый List<T>
с исходным объектом. Копая глубже в конструктор списка, показывает эту строку.
ICollection<T> ts = collection as ICollection<T>;
//.. ommited code
ts.CopyTo(this._items, 0);
Как бы вы, вы бы вырыть в метод CopyTo
. Здесь я застрял. Ведь копаться вызовов метода мы получаем до конечного вызова extern
метода
[ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
[SecurityCritical]
internal static extern void Copy(Array sourceArray, int sourceIndex, Array destinationArray, int destinationIndex, int length, bool reliable);
Мой вопрос (хотя я не могу показаться, чтобы найти его) делает метод ToList()
расширения (ICollection<T>.CopyTo()
) перебрать все объекты Collection (Массив) при исполнении?
Подтверждение: Где я могу найти источник для extern void Copy()
выше?
Редактировать: Я отредактировал этот вопрос непосредственно, как я понял после этого, я пытаюсь получить спецификацию интерфейса, а не реализацию. К сожалению
Я думаю, что, возможно, придется перефразировать вопрос, как следует говорить конкретно о функции ToList() .. – Nico
Я обновил мой ответ немного, чтобы сделать точку, потому что это на самом деле важно, что вы вызываете 'ToList()' on. – MarcinJuraszek