Frage

Ich habe eine Frage über die IEnumerator.GetEnumerator() Methode.

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);
    }
}

Wenn ich versuche, zu kompilieren, Fehlermeldung sagt

‚System.Collections.IEnumerator‘ enthält keine Definition für ‚GetEnumerator‘ enthalten und keine Erweiterung Methode ‚GetEnumerator‘ ein erstes Argument vom Typ ‚System.Collections.IEnumerator‘ akzeptieren konnte gefunden werden (möglicherweise fehlt eine using-Direktive oder eine Montage Referenz?)

Gibt es etwas falsch mit dem Code?

Vielen Dank im Voraus


Danke Jungs. Ich habe es.

War es hilfreich?

Lösung

Es ist IEnumerable.GetEnumerator() (oder IEnumerable<T>.GetEnumerator()), nicht IEnumerator.GetEnumerator(). Die Mitglieder auf IEnumerator sind MoveNext(), Current und Reset() (und Dispose für die generische Version). Die IEnumerable ist „etwas, das iteriert werden kann“ (zum Beispiel einer Liste) und der IEnumerator repräsentiert den aktuellen Zustand innerhalb dieser Iteration -. Wie ein Datenbank-Cursor

Es ist etwas seltsam, dass die Klasse nicht implementiert IEnumerable oder IEnumerable<T> selbst. Ich würde so etwas wie dies erwarten:

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

Andere Tipps

Kinder ist List<int>, die Geräte IEnumerable<int> und IEnumerable. Die GetEnumerator() Methode ist für die Schnittstellen definiert, nicht für IEnumerator.

children as IEnumerator in null führen sollte.

Es gibt keine GetEnumerator() Methode auf der IEnumerator Schnittstelle. Versuchen Sie, die IEnumerable Schnittstelle vielleicht zu benutzen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top