【发布时间】:2010-09-29 19:42:08
【问题描述】:
考虑两个具有相同主体的迭代器方法:
public static IEnumerable<int> It1() {
...
}
public static IEnumerator<int> It2() {
...
}
调用It2和调用It1.GetEnumerator()有什么不同的情况吗?
是否有充分的理由将迭代器定义为 IEnumerator<T> 而不是 IEnumerable<T>?我唯一能想到的就是当你在实现IEnumerable<T>.GetEnumerator()时。
编辑:迭代器方法是指使用yield return 和yield break 构造的方法。
【问题讨论】:
-
严格来说方法的实现不能相同。
-
当然可以。 public static IEnumerable
It1() { yield return 1; } 公共静态 IEnumerator It2() { 产量返回 1; } -
现在,编译器将它们转换成的内容明显不同;一个转换为实现 IEnumerator
的匿名类,另一个转换为实现 IEnumerable 和 IEnumerator 的两个匿名类。是否存在两个 IEnumerator 不同的情况?