linq扩展方法的性能ElementAt

时间:2010-04-28 15:24:45

标签: c# .net collections polymorphism linq-extensions

Enumerable.ElementAt(TSource)方法的MSDN库条目

  

“如果源的类型实现   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&lt;&gt;虽然它只被声明为ICollection&lt;&gt;?

由于

2 个答案:

答案 0 :(得分:4)

变量本身的类型与ElementAt方法无关 - 就它的而言,它只被声明为IEnumerable<T>,因为参数类型是。 (两个调用都将绑定到相同的扩展方法。)

这是在ElementAt中测试的对象的执行时类型。

答案 1 :(得分:0)

不,为什么会有差异。 ElementAt()IEnumerable<T>的扩展方法。在这种情况下没有多态性。