我的类实现了IEnumerable。而这两种编码GetEnumerator方法的方法可以编译:
public IEnumerator GetEnumerator()
{
yield return Database[id].GetEnumerator();
}
和
public IEnumerator GetEnumerator()
{
return Database[DatabaseId].GetEnumerator();
}
其中Database [id]是List。这些实现之间有什么区别吗?
答案 0 :(得分:6)
编译的原因是因为你不清楚可枚举的是什么。如果你把它变成通用的那就更明显了:
public IEnumerator<Foo> GetEnumerator()
{
return Database[id].GetEnumerator();
}
VS
public IEnumerator<IEnumerator<Foo>> GetEnumerator()
{
yield return Database[id].GetEnumerator();
}
你的yield return
版本没有产生结果:它正在产生迭代器 - 它是一个迭代器迭代器,一个枚举器的枚举器。而不是一个好办法。基本上,“不要那样做”。