Основная цель IEnumerable
: не отложить исполнение до более позднего срока. Целью IEnumerable
является предоставление способа итерации по частям объекта. Эти части могут быть элементами списка, но они также могут быть (например) символами string
. Интерфейс IEnumerable
существует, потому что не каждый класс, который допускает итерацию по его частям, представляет собой коллекцию или список (например, string
) и IEnumerable
, обеспечивает минимальный интерфейс для достижения этого без необходимости выполнять полностью взорванный ICollection
или IList
.
Основным и наиболее важным потребителем в IEnumerable
является foreach
утверждение, которое существует с начала
времени
.NET. Только позже появился LINQ с классом Enumerable
, который также основывается на интерфейсе IEnumerable
(или, точнее, на IEnumerable<T>
).
Говоря о LINQ, отсроченное выполнение, которое вы ссылаетесь в своем вопросе, действительно является ключевой особенностью LINQ. Это означает, что запрос, который вы определяете, не выполняется до тех пор, пока не будет выполнена итерация IEnumerable
. Это позволяет вам доработать ваши запросы перед их выполнением.
Это отложенное исполнение, хотя относится только к какIEnumerable
используется, не то, что он делает. Отложенное выполнение означает, что вы не начнете перебрать IEnumerable
при определении его, но в другом месте в программе, например, foreach
, ToList
и т.д.
Преимущество в том, что касается * каждого * интерфейса, чтобы обеспечить наименьшую информацию для вызывающего абонента. Поэтому вместо того, чтобы говорить для члена «Мне нужен массив для правильной работы», вы также можете сказать: «Мне нужна какая-то коллекция, которую я могу перечислить». Так что неважно, действительно ли это массив, список или даже en (бесконечный) поток. – HimBromBeere
'IEnumerable' в первую очередь о возможности повторения итерации через нуль или более экземпляров 'T' - нет ничего скрытого в перечислениях, которые допускают отложенное выполнение. Однако бывает, что LINQ предоставляет набор операторов, которые допускают отсроченное выполнение над перечисляемыми. Это две разные вещи. –
Enigmativity