我的 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/

10-10 22:10