我对c夏普相当陌生,我正在寻找以下问题的答案:
当您有IEnumerator<T>时,为什么要实现IEnumerator?IEnumerator将集合中的项作为类型对象返回,因此适合所有类型。
谢谢
发布于 2017-02-14 18:11:41
非泛化的
IEnumerator将集合中的项作为类型对象返回,因此适合所有类型。
这正是问题所在。现在您对序列中的对象一无所知。它们可能是任何东西,所以你必须能够处理从这个序列中出现的任何东西。如果你有一个长颈鹿序列,或者一个客户序列,或者一个整数序列,那么你知道序列中的每个元素都是长颈鹿,客户,整数等等。如果您有一个对象序列,那么您必须编写代码,检查每个对象是什么类型的东西。
具有类型信息使编译器能够在系统中执行该信息。假设我们有一个IEnumerable<Customer>。所以顺序中的每一件事都是顾客。如果我们当时说:
var first = customers.First();
var address = first.Address;现在编译器可以推断first是一个Customer,并且知道客户有地址,所以第二行是合法的。如果customers只是IEnumerable,那么编译器就不能证明您的程序是类型错误的!
此外,当作为object处理时,有些类型显示了一种称为“装箱惩罚”的性能惩罚。拥有一个通用类型的集合可以消除这种损失。
https://stackoverflow.com/questions/42233219
复制相似问题