只有当调用者实际需要该特定枚举元素时,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
}
LINQ操作的结果是惰性评估的,因此您可以:
public IEnumerable<string> GetResults()
{
return GetDelayedCompute1().Concat(GetDelayedCompute2());
}
在您枚举GetResults()
的结果之前,结果实际上并未实现。