Существует ли реализация IEnumerable, которая перебирает только свой источник (например, LINQ) один раз?

Предоставленаitems является результатом выражения q LINQ:

var items = from item in ItemsSource.RetrieveItems()
            where ...

Предположим, что создание каждого предмета занимает некоторое время, которое нельзя пренебречь.

Возможны два режима работы:

Using foreach would allow to start working with items in the beginning of the collection much sooner than whose in the end become available. However if we wanted to later process the same collection again, we'll have to copy save it:

var storedItems = new List<Item>();
foreach(var item in items){
    Process(item);
    storedItems .Add(item);
}

// Later
foreach(var item in storedItems){
    ProcessMore(item);
}

Because if we'd just made foreach(... in items) then temsSource.RetrieveItems() would get called again.

We could use .ToList() right upfront, but that would force us wait for the last item to be retrieved before we could start processing the first one.

Question: ЕстьIEnumerable реализация, которая будет повторяться в первый раз, как обычный результат запроса LINQ, но материализуется в процессе, так что второйforeach будет перебирать сохраненные значения?

Ответы на вопрос(3)

Ваш ответ на вопрос