我的 class 实现IEnumerable。可以编译这两种编码GetEnumerator方法的方法:
public IEnumerator GetEnumerator()
{
yield return Database[id].GetEnumerator();
}
和
public IEnumerator GetEnumerator()
{
return Database[DatabaseId].GetEnumerator();
}
其中Database [id]是列表。这些实现之间有什么区别吗?
最佳答案
进行编译的原因是因为您不清楚可枚举的含义。如果将其设为通用,它将变得更加明显:
public IEnumerator<Foo> GetEnumerator()
{
return Database[id].GetEnumerator();
}
与
public IEnumerator<IEnumerator<Foo>> GetEnumerator()
{
yield return Database[id].GetEnumerator();
}
您的
yield return
版本没有产生结果:它产生的是迭代器-它是迭代器的迭代器,是枚举器的迭代器。而不是一个好办法。基本上,“不要那样做”。关于c# - GetEnumerator:返回值或 yield 返回,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18487199/