IEnumerable
и IEnumerator
- это две разные вещи.
IEnumerable<T>
- это последовательность, которую можно повторять.
IEnumerator<T>
- это объект, который возвращается IEnumerable<T>
для однократной итерации последовательности.
В общем случае единственное место для возврата IEnumerator<T>
- метод GetEnumerator()
.
yield return
ведет себя одинаково для обоих типов, за исключением того, что метод итератора, который возвращает IEnumerable<T>
, может выполняться несколько раз (каждый раз, когда последовательность перечисляется).
Для получения дополнительной информации о том, как это работает, см. Статью Джона Скита .
.