相关疑难解决方法(0)

是否有IEnumerable实现只迭代它的源(例如LINQ)一次

提供itemsq LINQ表达式的结果:

var items = from item in ItemsSource.RetrieveItems()
            where ...
Run Code Online (Sandbox Code Playgroud)

假设每个项目的生成需要一些不可忽略的时间.

有两种操作模式:

  1. 使用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()会再次被召唤.

  2. 我们可以直接使用.ToList(),但这会迫使我们等待最后一项检索,然后才能开始处理第一项.

问题:是否有一个IEnumerable实现会像常规的LINQ查询结果一样首次迭代,但会在进程中实现,以便第二次foreach迭代存储的值?

.net c# linq ienumerable

22
推荐指数
2
解决办法
1883
查看次数

标签 统计

.net ×1

c# ×1

ienumerable ×1

linq ×1