linq 扩展方法 ElementAt 的性能
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<>?
谢谢
The MSDN library entry to Enumerable.ElementAt(TSource)
Method says
"If the type of source implements
IList, that implementation is used
to obtain the element at the specified
index. Otherwise, this method obtains
the specified element."
Let's say we have following example:
ICollection<int> col = new List<int>() { /* fill with items */ };
IList<int> list = new List<int>() { /* fill with items */ };
col.ElementAt(10000000);
list.ElementAt(10000000);
Is there any difference in execution? or does ElementAt recognize that col
also implements IList<> although it's only declared as ICollection<>?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
变量本身的类型与
ElementAt
方法无关 - 就它而言,它仅声明为IEnumerable
,因为这就是参数类型。 (两个调用都将绑定到相同的扩展方法。)这是在
ElementAt
中测试的对象的执行时类型。The type of the variable itself is irrelevant to the
ElementAt
method - as far as it's concerned, it's only declared asIEnumerable<T>
, because that's what the parameter type is. (Both calls will be bound to the same extension method.)It's the execution-time type of the object which is tested in
ElementAt
.不,为什么会有差异。
ElementAt()
是IEnumerable
的扩展方法。在这种情况下不存在多态性。No, why there should be a difference.
ElementAt()
is an extension method forIEnumerable<T>
. There is no polymorphism in this case.