考虑具有相同实体的两个迭代器方法:
public static IEnumerableIt1() { ... } public static IEnumerator It2() { ... }
呼叫It2
与呼叫有It1.GetEnumerator()
什么不同吗?
是否有充分的理由将迭代器定义为IEnumerator
结束IEnumerable
?我能想到的唯一一个就是你实施的时候IEnumerable
.
编辑:通过迭代器方法我的意思是使用yield return
和yield break
构造的方法.
如上所述,你无法foreach
超越IEnumerator
.因此,它很难集成到您希望迭代返回的代码中的位置.
此外,这里的不足之处在于IEnumerable
它意味着是一个工厂,因此您可以生成IEnumerator
与该集合的实现没有直接关联的实现T
.
现在更重要的是,LINQ的所有扩展方法都有效IEnumerable
,因此您希望通过返回它来使您的枚举尽可能易于使用.