提供itemsq LINQ表达式的结果:
var items = from item in ItemsSource.RetrieveItems()
where ...
Run Code Online (Sandbox Code Playgroud)
假设每个项目的生成需要一些不可忽略的时间.
有两种操作模式:
使用foreach将允许开始使用集合开头的项目,而不是最终可用的项目.但是,如果我们想稍后再次处理相同的集合,我们将不得不复制保存它:
var storedItems = new List<Item>();
foreach(var item in items){
Process(item);
storedItems .Add(item);
}
// Later
foreach(var item in storedItems){
ProcessMore(item);
}
Run Code Online (Sandbox Code Playgroud)
因为如果我们刚刚制作的foreach(... in items)话temsSource.RetrieveItems()会再次被召唤.
我们可以直接使用.ToList(),但这会迫使我们等待最后一项检索,然后才能开始处理第一项.
问题:是否有一个IEnumerable实现会像常规的LINQ查询结果一样首次迭代,但会在进程中实现,以便第二次foreach迭代存储的值?