C#结合多个函数的收益率回报

时间:2019-02-16 03:31:16

标签: c# return ienumerable concat yield

仅当调用者实际需要特定的枚举元素时,c#yield计算才会延迟循环的每次迭代执行。是否可以组合多个此类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
}

1 个答案:

答案 0 :(得分:6)

LINQ操作的结果是延迟求值的,因此您可以:

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

直到您枚举GetResults()的结果,结果才真正实现。