2

我的班级实现了 IEnumerable。并且这两种编码GetEnumerator方法的方式都可以编译:

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

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

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

4

1 回答 1

6

编译的原因是因为您不清楚可枚举是什么。如果你让它通用,它会变得更加明显:

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

对比

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

你的yield return版本没有产生结果:它产生了迭代器——它是一个迭代器的迭代器,一个枚举器的枚举器。而不是一个好办法。基本上,“不要那样做”。

于 2013-08-28T12:02:26.220 回答