C#:收益率范围/收集
我使用yield return
关键字相当多,但是当我想向IEnumerable
添加一个范围时,我发现它缺乏。 下面是我想要做的一个快速示例:
IEnumerable<string> SomeRecursiveMethod()
{
// some code
// ...
yield return SomeRecursiveMethod();
}
当然这会导致错误,可以通过简单的循环来解决。 有一个更好的方法吗? 一个循环感觉有点笨拙。
不,我不害怕。 F#支持这个yield!
,但在C#中没有等价物 - 基本上,您必须使用循环。 对不起......我感到你的痛苦。 我在我的一篇Edulinq博客文章中提到过,它会让事情变得更简单。
请注意,递归使用yield return会很昂贵 - 请参阅Wes Dyer在迭代器上的帖子以获取更多信息(并提及四年前正在考虑的“yield foreach”)...)
如果您已经有一个IEnumerable
循环,并且返回类型是IEnumerable
(就像可以使用yield return
函数一样),那么您可以简单地返回该枚举。
如果您遇到需要合并多个IEnumerable
结果的情况,可以使用IEnumerable<T>.Concat
扩展方法。
但是,在递归示例中,您需要根据枚举的内容来终止枚举/连接。 我不认为我的方法会支持这一点。
yield关键字确实非常好。 但是将它嵌套在for循环中会导致生成和执行更多的胶水代码。
如果您可以使用不太实用的编程风格,则可以传递一个List,并将其添加到其中:
void GenerateList(List<string> result)
{
result.Add("something")
// more code.
GenerateList(result);
}
链接地址: http://www.djcxy.com/p/53007.html