我有一个问题 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”的定义,也没有扩展方法“ getEnumerator”接受类型'system.collections.collections.ienumerator'的第一个参数(您是否缺少使用指令或使用指令或汇编参考参考) ?)

代码有什么问题吗?

提前致谢


谢谢你们。我得到了它。

有帮助吗?

解决方案

它是 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();
    }
}

其他提示

孩子是 List<int>, ,实施 IEnumerable<int>IEnumerable. 。这 GetEnumerator() 为这些接口定义了方法,而不是 IEnumerator.

children as IEnumerator 应该导致无效。

没有 GetEnumerator() 方法 ienumerator 界面。您是否想使用 ienumerable 也许接口?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top