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;?
由于
答案 0 :(得分:4)
变量本身的类型与ElementAt
方法无关 - 就它的而言,它只被声明为IEnumerable<T>
,因为参数类型是。 (两个调用都将绑定到相同的扩展方法。)
这是在ElementAt
中测试的对象的执行时类型。
答案 1 :(得分:0)
不,为什么会有差异。 ElementAt()
是IEnumerable<T>
的扩展方法。在这种情况下没有多态性。