Отказ от ответственности: Я понимаю разницу между IEnumerable<T>
и IEnumerator<T>
и как использовать оба варианта. Это не дубликат this или this.Почему 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>
?
Это, конечно, * возможно, было, но, не разговаривая с командой разработчиков .NET, я сомневаюсь, что вы получите здесь большой ответ. – BradleyDotNET
Предположительно, будут другие ситуации (помимо циклов foreach), где необходим интерфейс, который обещает «способный обеспечить перечислитель». –
@BradleyDotNET Это было спроектировано так, как будто это не значит, что нет причины. Для всех полезно узнать что-то, что потенциально имеет причину, я НЕ согласен, что это должно быть закрыто. – KFL