yield语句实现

我想以一种容易理解的forms来了解yield声明的一切

在实现迭代器模式时,我已经阅读了yield语句和它的简易性。 但是,大部分是非常干燥的。 我想深入了解微软如何处理回报率。

另外,你什么时候使用yield break?

yield通过在内部build立一个状态机来实现。 它存储下一次退出的例程的当前状态,并在下一次从该状态恢复。

您可以使用Reflector来查看编译器是如何实现的。

当您想要停止返回结果时使用yield break 。 如果你没有yield break ,编译器会在函数结尾处假设一个(就像正常函数中的return;语句)

从Raymond Chen的博客开始,

  • C#中迭代器的实现及其后果(第一部分)
  • C#中迭代器的实现及其后果(第2部分)
  • C#中迭代器的实现及其后果(第3部分)

正如Mehrdad所说,它构build了一个状态机。

除了使用Reflector(另一个极好的build议),您可能会发现我的关于迭代器块实现的文章很有用。 如果不是finally块,这将是相对简单的 – 但它们会带来复杂性的一个额外的维度!