Вопрос

У меня есть вопрос о 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. ?)

Есть ли что-то не так с кодом?

заранее спасибо


Спасибо вам, ребята. Я понял.

Это было полезно?

Решение

Это IEnumerable.GetEnumerator() (или IEnumerable<T>.GetEnumerator()), нет IEnumerator.GetEnumerator(). Отказ Члены IEnumerator являются MoveNext(), Current а также Reset() (а также 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() Метод на Иенумератор интерфейс. Вы пытаетесь использовать Ienumerable Интерфейс возможно?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top