c#结合多个函数的yield return

问题描述 投票:2回答:1

只有当调用者实际需要该特定枚举元素时,c#yield compute才会延迟循环的每次迭代的执行。是否可以组合多个这样的yield return函数并仍然将动态枚举集暴露给最终调用者?

public IEnumerable<string> GetDelayedCompute1()
{
    // compute ...
    foreach(var s in results)
    {
        yield return s;
    }
}

public IEnumerable<string> GetDelayedCompute2()
{
    // compute ... 
    foreach(var s in results)
    {
        yield return s;
    }
}

public IEnumerable<string> GetResults()
{
    // how to combine results of GetDelayedCompute1 and GetDelayedCompute2
    // and yield return without forcing enumeration
}
c# return ienumerable concat yield
1个回答
6
投票

LINQ操作的结果是惰性评估的,因此您可以:

public IEnumerable<string> GetResults()
{
    return GetDelayedCompute1().Concat(GetDelayedCompute2());
}

在您枚举GetResults()的结果之前,结果实际上并未实现。

© www.soinside.com 2019 - 2024. All rights reserved.