производительность метода расширения linq ElementAt - PullRequest
1 голос
/ 28 апреля 2010

Запись библиотеки MSDN для Enumerable.ElementAt(TSource) Метод говорит

"Если тип источника реализует IList, эта реализация используется получить элемент по указанному индекс. В противном случае этот метод получает указанный элемент. "

Допустим, у нас есть следующий пример:

        ICollection<int> col = new List<int>() { /* fill with items */ };
        IList<int> list = new List<int>() { /* fill with items */ };

        col.ElementAt(10000000);
        list.ElementAt(10000000);

Есть ли разница в исполнении? или ElementAt распознает, что col также реализует IList <>, хотя он только объявлен как ICollection <>?

Спасибо

Ответы [ 2 ]

4 голосов
/ 28 апреля 2010

Тип самой переменной не имеет отношения к методу ElementAt - поскольку относится к , он объявлен только как IEnumerable<T>, потому что это тип параметра. (Оба вызова будут привязаны к одному и тому же методу расширения.)

Это тип времени выполнения объекта, который тестируется в ElementAt.

0 голосов
/ 28 апреля 2010

Нет, почему должна быть разница. ElementAt() - это метод расширения для IEnumerable<T>. В этом случае полиморфизма нет.

...