C# GetEnumerator:返回或产生返回

C# GetEnumerator:返回或产生返回,c#,iterator,C#,Iterator,我的类实现了IEnumerable。可以编译以下两种编写GetEnumerator方法的方法: public IEnumerator GetEnumerator() { yield return Database[id].GetEnumerator(); } 及 其中数据库[id]是列表。这些实现之间有什么区别吗?编译的原因是您不清楚什么是可枚举的。如果将其设置为通用,则会变得更加明显: public IEnumerator<Foo> GetEnumerator() {

我的类实现了IEnumerable。可以编译以下两种编写GetEnumerator方法的方法:

public IEnumerator GetEnumerator()
{
    yield return Database[id].GetEnumerator();
}


其中数据库[id]是列表。这些实现之间有什么区别吗?

编译的原因是您不清楚什么是可枚举的。如果将其设置为通用,则会变得更加明显:

public IEnumerator<Foo> GetEnumerator()
{
    return Database[id].GetEnumerator();
}
public IEnumerator GetEnumerator()
{
返回数据库[id]。GetEnumerator();
}
vs

public IEnumerator GetEnumerator()
{
生成返回数据库[id]。GetEnumerator();
}
您的
yield return
版本没有生成结果:它生成的是迭代器-迭代器的迭代器,枚举器的枚举器。而且不是很好。基本上,“不要那样做”

public IEnumerator<Foo> GetEnumerator()
{
    return Database[id].GetEnumerator();
}
public IEnumerator<IEnumerator<Foo>> GetEnumerator()
{
    yield return Database[id].GetEnumerator();
}