Задать вопрос
Azimia
@Azimia
Давайте сделаем это!

Какой смысл использовать IEnumerable?

Зачем использовать этот интерфейс если его прекрасно можно заменить циклом foreach?
  • Вопрос задан
  • 211 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 4
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
главная фишка IEnumerable это возможность создавать параллельную конвеерную обработку легкочитаемым кодом. переводя на кухонный язык - если функция возвращает IEnumerable<что то там> из относительно медленного источника (БД, сложная обработка) она может делать yield return <что то там> поштучно. если эта функция оформлена как асинхронная, то вызывающий код, может быть написан, так, как будто просто получает IEnumerable<что то там> сразу, но с ключевым словом await. в итоге вызывающий код, и код поставщик данных, будут обрабатываться параллельно

весь LINQ построен на IEnumerable, не только как на типе посреднике между типовыми обработками наборов данных, имеющих не известный заранее размер (тут бы и List справился), но и на возможности создавать асинхронные перегрузки для основных методов LINQ

ps yield return вообще мощная штука. даже без async/await. как пример yieldprolog.sourceforge.net
Ответ написан
Комментировать
Nipheris
@Nipheris Куратор тега C#
https://docs.microsoft.com/en-us/dotnet/csharp/lan...
The foreach statement executes a statement or a block of statements for each element in an instance of the type that implements the System.Collections.IEnumerable or System.Collections.Generic.IEnumerable interface. The foreach statement is not limited to those types and can be applied to an instance of any type that satisfies the following conditions:

  • has the public parameterless GetEnumerator method whose return type is either class, struct, or interface type,
  • the return type of the GetEnumerator method has the public Current property and the public parameterless MoveNext method whose return type is Boolean.


Так что да, НАПРЯМУЮ вы очень редко будете пользоваться IEnumerable, НО если вы хотите чтобы ваш тип данных можно было использовать как коллекцию для foreach, удобно реализовать интерфейс IEnumerable чтобы убедиться что ваш тип реализует то, что будет использовано циклом foreach (хотя, строго говоря делать это не обязательно - в конечном счёте компилятору нужны лишь конкретные публичные методы, т.е. компилятор действует здесь по принципу структурной типизации).
Ответ написан
Комментировать
petermzg
@petermzg
Самый лучший программист
Ответ написан
Комментировать
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы