首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IEnumerator对IEnumerator<T>

IEnumerator对IEnumerator<T>
EN

Stack Overflow用户
提问于 2017-02-14 18:05:40
回答 1查看 773关注 0票数 2

我对c夏普相当陌生,我正在寻找以下问题的答案:

当您有IEnumerator<T>时,为什么要实现IEnumeratorIEnumerator将集合中的项作为类型对象返回,因此适合所有类型。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-14 18:11:41

非泛化的IEnumerator将集合中的项作为类型对象返回,因此适合所有类型。

这正是问题所在。现在您对序列中的对象一无所知。它们可能是任何东西,所以你必须能够处理从这个序列中出现的任何东西。如果你有一个长颈鹿序列,或者一个客户序列,或者一个整数序列,那么你知道序列中的每个元素都是长颈鹿,客户,整数等等。如果您有一个对象序列,那么您必须编写代码,检查每个对象是什么类型的东西。

具有类型信息使编译器能够在系统中执行该信息。假设我们有一个IEnumerable<Customer>。所以顺序中的每一件事都是顾客。如果我们当时说:

代码语言:javascript
复制
var first = customers.First();
var address = first.Address;

现在编译器可以推断first是一个Customer,并且知道客户有地址,所以第二行是合法的。如果customers只是IEnumerable,那么编译器就不能证明您的程序是类型错误的!

此外,当作为object处理时,有些类型显示了一种称为“装箱惩罚”的性能惩罚。拥有一个通用类型的集合可以消除这种损失。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42233219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档