Pregunta

Tengo una pregunta acerca del método 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);
    }
}

Cuando intento compilar, mensaje de error dice

'System.Collections.IEnumerator' no contiene una definición para 'GetEnumerator' y ningún método de extensión 'GetEnumerator' aceptar un primer argumento de tipo 'System.Collections.IEnumerator' se podía encontrar (¿falta una directiva using o una referencia de ensamblado?)

¿Hay algo mal con el código?

Gracias de antemano


Gracias chicos. Lo tengo.

¿Fue útil?

Solución

Es IEnumerable.GetEnumerator() (o IEnumerable<T>.GetEnumerator()), no IEnumerator.GetEnumerator(). Los miembros de IEnumerator son MoveNext(), Current y Reset() (y Dispose para la versión genérica). El IEnumerable es "algo que puede ser iterado sobre" (lista por ejemplo a) y el IEnumerator representa el estado actual dentro de esa iteración -. Como un cursor de base de datos

Es un poco extraño que su clase no implementa IEnumerable o IEnumerable<T> sí. Me esperaba algo como esto:

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

Otros consejos

niños es List<int>, que implementa IEnumerable<int> y IEnumerable. El método GetEnumerator() se define para esas interfaces, no para IEnumerator.

children as IEnumerator debería dar como resultado nulo.

No hay ningún método GetEnumerator() en la IEnumerator interfaz. ¿Estás tratando de utilizar la interfaz IEnumerable tal vez?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top