【发布时间】:2020-07-28 10:14:43
【问题描述】:
使用yield return 将方法转换为迭代器。 The return type of an iterator must be IEnumerable, IEnumerable<T>, IEnumerator, or IEnumerator<T>.
我发现,如果迭代器返回 IEnumerable 类型之一,则它只能在 foreach 循环中使用。鉴于此限制,何时选择 IEnumerator 返回类型而不是 IEnumerable 有意义?
【问题讨论】:
-
我见过的唯一一个返回
IEnumerator的迭代器方法是用于 Unity's coroutines。我认为这是因为他们(ab)使用迭代器机制来做一些不同的事情,并且不希望人们意外地认为他们应该循环协程。 -
我真的认为这段代码:dotnetfiddle.net/KOMtuL - 会崩溃,因为我只返回接口
IEnumerator所以谁真的实现了MoveNext()方法?!?魔法? -
@RandRandom Demystified
-
@RandRandom 代码块将被编译成一个 IEnumerator 状态机,该状态机将处理 MoveNext 和 Current。
标签: c# iterator ienumerable ienumerator