linq 扩展方法 ElementAt 的性能

发布于 2024-08-31 03:33:34 字数 551 浏览 6 评论 0原文

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

空城旧梦 2024-09-07 03:33:35

变量本身的类型与 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 as IEnumerable<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.

征﹌骨岁月お 2024-09-07 03:33:35

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

No, why there should be a difference. ElementAt() is an extension method for IEnumerable<T>. There is no polymorphism in this case.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文