Отказ от ответственности: Я понимаю разницу между IEnumerable<T> и IEnumerator<T> и как использовать оба. Это не дубликат этого или этого.
Это скорее вопрос дизайна - поскольку IEnumerator<T> уже инкапсулирует всю необходимую информацию (.Current, .MoveNext()) о чем-то, что можно перечислить, то какая точка введения типа (IEnumerable<T>) единственная цель которого - вернуть экземпляр первого?
Конкретно:
-
Почему
foreachне может быть запрограммирован для итерации непосредственно черезIEnumerator<T>, например:// foreach (var e in anEnumerator) { //... } while (anEnumerator.MoveNext()) { doSomething(anEnumerator.Current); } -
Почему Linq не может быть построен на основе непосредственно
IEnumerator<T>?