1

我有一个关于IEnumerator.GetEnumerator()方法的问题。

public class NodeFull
{
    public enum Base : byte {A = 0, C, G, U };
    private int taxID;
    private List<int> children;

    public int TaxID
    {
        get { return taxID; }
        set { taxID = value; }
    }

    public int this[int i]
    {
        get { return children[i]; }
        set { children[i] = value; }
    }

    public IEnumerator GetEnumerator()
    {
        return (children as IEnumerator).GetEnumerator();
    }

    public TaxNodeFull(int taxID)
    {
        this.taxID = taxID;
        this.children = new List<int>(3);
    }
}

当我尝试编译时,错误消息说

“System.Collections.IEnumerator”不包含“GetEnumerator”的定义,并且找不到接受“System.Collections.IEnumerator”类型的第一个参数的扩展方法“GetEnumerator”(您是否缺少 using 指令或程序集引用?)

代码有什么问题吗?

提前致谢


谢谢你们。我得到了它。

4

3 回答 3

8

它是IEnumerable.GetEnumerator()(或IEnumerable<T>.GetEnumerator()),不是IEnumerator.GetEnumerator()。上的成员IEnumeratorMoveNext(),CurrentReset()Dispose对于通用版本)。IEnumerable是“可以迭代的东西”(例如列表),并且表示IEnumerator该迭代中的当前状态 - 就像数据库游标一样。

IEnumerable您的类没有实现或IEnumerable<T>本身没有实现,这有点奇怪。我期待这样的事情:

class NodeFull : IEnumerable<int>
{
    ... other stuff as normal ...

    public IEnumerator<int> GetEnumerator()
    {
        return children.GetEnumerator();
    }

    // Use explicit interface implementation as there's a naming
    // clash. This is a standard pattern for implementing IEnumerable<T>.
    IEnumerator IEnumerable.GetEnumerator()
    {
        // Defer to generic version
        return GetEnumerator();
    }
}
于 2010-09-17T16:26:55.650 回答
2

children is List<int>,它实现了IEnumerable<int>and IEnumerable。该GetEnumerator()方法是为这些接口定义的,而不是为IEnumerator.

children as IEnumerator应该导致null。

于 2010-09-17T16:27:38.627 回答
1

IEnumerator接口上没有GetEnumerator()方法。您是否尝试使用IEnumerABLE接口?

于 2010-09-17T16:27:22.767 回答