关于C#中IEnumerator.GetEnumerator的问题

Mav*_*ang 1 c# ienumerable ienumerator

我对这个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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

代码有什么问题吗?

提前致谢


感谢你们.我知道了.

Jon*_*eet 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();
    }
}
Run Code Online (Sandbox Code Playgroud)