【发布时间】:2019-02-27 22:54:23
【问题描述】:
我一直在寻找这一点,但我还没有得到任何关于它的信息!。
我看了很多关于“收益回报”的视频和红色文章,我想我对此有了更好的理解,但有一点我无法理解
什么是正确的接口,我应该在其中使用 yield return 吗? (当然 Yield 返回会在 Loop 中使用,但在哪个界面中使用)。
我的意思是在这一点上有所不同,我看到一些人在IEnumerator 中创建了一个“迭代器”,例如:
static string[] Names = { "Name1", "Name2", "Name3" };
static IEnumerator Test()
{
for (int i = 0; i < Names.Length; i++)
{
yield return Names[i];
}
}
还有一些人使用IEnumerable:
static IEnumerable Test()
{
for (int i = 0; i < Names.Length; i++)
{
yield return Names[i];
}
}
我假设最好在IEnumerable 接口中使用“Yield return”创建一个“Iterator”,因为通常 IEnumerable 负责访问该类(更准确地说,它返回该类的一个实例(Object)) 捍卫迭代的逻辑。以及在这种情况下编译器(yield 关键字的糖)究竟发生了什么。
private static IEnumerable Test() => new <Test>d__1(-2);
//decompiled code of Test() method above Using reflector tool
对此有什么想法吗?
【问题讨论】:
-
返回
IEnumerable,而不是IEnumerator。所有 linq 扩展方法都使用IEnumerable。 -
当你想要一种非标准的枚举方式时,你只需要定义一个
IEnumerator。您的Test方法应该返回一个IEnumerable,可以使用foreach循环枚举。
标签: c# iterator yield-return