我是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;
}
为什么一件事可以返回两种不同的返回类型?
答案 0 :(得分:0)
使用yield
的方法由编译器重建。它使用全新的编译器生成的类创建一个状态机。
此状态机类是IEnumerator
以及IEnumerable
方法的GetEnumerator
返回自身的IEnumerable
。
因此,根据您声明方法的方式,编译器发出的代码将返回IEnumerator
或已初始化的yield
。
与往常一样,Jon Skeet上有一篇很好的文章,介绍了使用ChatGroups.initializeMap();
关键字在幕后发生的事情。