c#结合多个函数的yield return

Bal*_*tar 2 c# ienumerable yield concat return

只有当调用者实际需要该特定枚举元素时,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
}
Run Code Online (Sandbox Code Playgroud)

Joh*_* Wu 6

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

public IEnumerable<string> GetResults()
{
    return GetDelayedCompute1().Concat(GetDelayedCompute2());
}
Run Code Online (Sandbox Code Playgroud)

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