Question

J'ai une question sur la méthode 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);
    }
}

Quand je tente de compiler, message d'erreur indique

  

« System.Collections.IEnumerator » ne contient pas de définition pour « GetEnumerator » et aucune méthode d'extension « GetEnumerator » accepter un premier argument de type « System.Collections.IEnumerator » pourrait être trouvée (vous manque une directive ou à l'aide une référence d'assemblage?)

Y at-il quelque chose de mal avec le code?

Merci à l'avance


Merci les gars. Je l'ai.

Était-ce utile?

La solution

de IEnumerable.GetEnumerator() (ou IEnumerable<T>.GetEnumerator()), non IEnumerator.GetEnumerator(). Les membres sur IEnumerator sont MoveNext(), Current et Reset() (et Dispose pour la version générique). Le IEnumerable est « quelque chose qui peut être itéré » (par exemple une liste) et l'IEnumerator représente l'état actuel dans cette itération -. Comme un curseur de base de données

Il est un peu étrange que votre classe ne met pas en œuvre IEnumerable ou IEnumerable<T> lui-même. J'attends quelque chose comme ceci:

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

Autres conseils

enfants est List<int>, qui met en œuvre IEnumerable<int> et IEnumerable. La méthode de GetEnumerator() est définie pour ces interfaces, et non pour IEnumerator.

children as IEnumerator devrait conduire à nulle.

Il n'y a pas de méthode GetEnumerator() sur le IEnumerator . Essayez-vous d'utiliser l'interface IEnumerable peut-être?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top