我使用了很多yield return关键字,但是当我想要添加一个范围时,我发现它缺乏IEnumerable.这是我想做的一个简单示例:
IEnumerable<string> SomeRecursiveMethod()
{
// some code
// ...
yield return SomeRecursiveMethod();
}
Run Code Online (Sandbox Code Playgroud)
当然这会导致错误,可以通过简单的循环来解决.有一个更好的方法吗?一个循环感觉有点笨重.
Jon*_*eet 48
不,我不害怕.F#确实支持这个yield!,但在C#中没有相应的东西 - 基本上你必须使用循环.对不起......我感觉到你的痛苦.我在我的一篇Edulinq博客文章中提到过,它会让事情更简单.
请注意,递归使用yield return可能很昂贵 - 请参阅Wes Dyer关于迭代器的帖子以获取更多信息(并提及四年前正在考虑的"yield foreach"......)
如果你已经有一个IEnumerable循环,并且返回类型是IEnumerable(对于可以使用的函数的情况yield return),你可以简单地返回该枚举.
如果您需要组合多个IEnumerables的结果,则可以使用IEnumerable<T>.Concat扩展方法.
但是,在递归示例中,您需要根据枚举的内容终止枚举/连接.我不认为我的方法会支持这个.
| 归档时间: |
|
| 查看次数: |
10146 次 |
| 最近记录: |