收益回报IEnumerator或IEnumerable

时间:2019-05-27 05:30:19

标签: c# oop design-patterns

我是C#的新手,只是一个关于yield关键字的问题,这使我非常困惑。 看来yield可以返回IEnumerator和IEnumerable

//case 1
static IEnumerator YieldReturn()
{
   yield return 1;
   yield return 2;
   yield return 3;
}

//case 2
static IEnumerable YieldReturn()
{
   yield return 1;
   yield return 2;
   yield return 3;
}

为什么一件事可以返回两种不同的返回类型?

1 个答案:

答案 0 :(得分:0)

使用yield的方法由编译器重建。它使用全新的编译器生成的类创建一个状态机。

此状态机类是IEnumerator以及IEnumerable方法的GetEnumerator返回自身的IEnumerable

因此,根据您声明方法的方式,编译器发出的代码将返回IEnumerator或已初始化的yield

与往常一样,Jon Skeet上有一篇很好的文章,介绍了使用ChatGroups.initializeMap();关键字在幕后发生的事情。