Я хочу знать точное место, где мы должны использовать IEnumberable<T>
Я знаю, как работает IEnumerable<T>
и возвращает IEnumerator<T>
и все такое, но конечной целью IEnumerable<T>
является запрос данных из коллекции, не так ли? Это то, что мы уже можем сделать, используя цикл foreach()? Итак, когда использовать IEnumerable<T>
? каков фактический практический сценарий, когда IEnumerable<T>
является единственным вариантом запроса коллекции?
Смысл IEnumberale<T>
не в том, чтобы «запросить коллекцию». Дело в том, чтобы представить любую коллекцию, которую можно повторять. Таким образом, все, что можно повторить, должно реализовывать IEnumerable<T>
, и таким образом вы можете использовать цикл foreach
, чтобы перебрать его.
Я не уверен, что у вас здесь за недоразумение, но если вы не перебираете только массивы, foreach
нужен тип, который вы перебираете, чтобы реализовать IEnumerable<T>
для работы.
Я могу зацикливаться на коллекции, используя foreach() напрямую, так когда же использовать IEnumerable<T>?
@HammadMaqbool Вы можете перебирать коллекцию только потому, что она реализует IEnumerable<T>
@canton7 /s/коллекция/последовательность
@MarcGravell Да, и я сказал кучу других вещей, которые также не совсем верны. Попытка быть ясным, а не полностью правильным, поскольку проблема здесь заключается в концептуальном непонимании, а не в деталях.
@HammadMaqbool, когда вы используете foreach, вы используете IEnumerable<T>. Как и другие, упомянутые выше, ключевое слово foreach использует IEnumerable.
но конечная цель
IEnumerable<T>
— запросить данные из коллекции, не так ли?
Нет; цель IEnumerable<T>
— предоставить доступ к последовательности, которая может быть коллекцией, а может и не быть. Суть в том, чтобы абстрагироваться от того, что является основным источником. Это может быть необработанная коллекция, но это может быть:
collection.Where(...).Select(...)
и т. д.)Если вы знаете, что всегда повторяете коллекцию, то будьте уверены: не стесняйтесь использовать конкретный тип или ICollection<T>
/IList<T>
и т. д.; но: не каждая последовательность является коллекцией.
Я не уверен, что понимаю, о чем вы пытаетесь спросить. Цикл
foreach
может перебирать все, что реализуетIEnumerable<T>
.