Отказ от ответственности: Я понимаю разницу между 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>
?