我一直在寻找关于这个问题的信息,但是还没有找到任何有用的资料!
我看了很多关于“Yield Return”的视频和文章,我认为我对它有了更好的理解,但是有一个问题我还是不太明白。
在哪个接口中应该使用yield return?(当然,yield return将在循环中使用,但是在哪个接口中呢?)
我的意思是,在这个问题上有一些变化。例如,我看到有些人在IEnumerator
中创建一个"iterator":
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”创建“迭代器”更好,因为一般情况下,IEnumerable负责访问类(更准确地说,它返回一个类(对象)的实例),该类维护迭代逻辑。编译器会在这种情况下(使用yield关键字的语法糖)实现这一点。
private static IEnumerable Test() => new <Test>d__1(-2);
//decompiled code of Test() method above Using reflector tool
有关这个的任何想法吗?
IEnumerable
,而不是IEnumerator
。所有的 Linq 扩展方法都使用IEnumerable
。 - FCinIEnumerator
。您的Test
方法应返回一个可使用foreach
循环枚举的IEnumerable
。 - mm8