返回IEnumerable的方法可以从具有相同返回类型的另一个方法获取其输出吗?

时间:2009-07-22 14:10:59

标签: c# .net ienumerable yield

看看C#代码:

 IEnumerable<int> innerMethod(int parameter)
 {
     foreach(var i in Enumerable.Range(0, parameter))
     {
         yield return i;
     }
 }

 IEnumerable<int> outerMethod(int parameter)
 {
     foreach(var i in Enumerable.Range(1, parameter))
     {
         foreach(var j in innerMethod(i))
         {
              yield return j;
         }
     }
 }

问题是:outerMethod有一种方法可以在没有迭代innerMethod输出的情况下获得相同的输出吗?

1 个答案:

答案 0 :(得分:4)

不幸的是没有。

在F#中,您可以执行类似

的操作
yield! innerMethod(i)

但C#中没有相应的内容。

我的意思是,在这种特殊情况下,你可以用以下方法替换方法:

 IEnumerable<int> outerMethod(int parameter)
 {
     return Enumerable.Range(1, parameter)
                      .SelectMany(x => innerMethod(x));
 }

但我希望你想要一个更通用的方法。 (如果这有帮助,那太好了!)