Domanda

Ho una domanda sul metodo 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);
    }
}

Quando provo a compilare, messaggio di errore dice

  

'System.Collections.IEnumerator' non contiene una definizione per 'GetEnumerator' e nessun metodo di estensione 'GetEnumerator' accettare un primo argomento di tipo 'System.Collections.IEnumerator' potrebbe essere trovato (che le manca una direttiva using o un riferimento all'assembly?)

C'è sbagliato qualcosa con il codice?

Grazie in anticipo


Grazie ragazzi. Ho capito.

È stato utile?

Soluzione

E 'IEnumerable.GetEnumerator() (o IEnumerable<T>.GetEnumerator()), non IEnumerator.GetEnumerator(). I membri di IEnumerator sono MoveNext(), Current e Reset() (e Dispose per la versione generica). Il IEnumerable è "qualcosa che può essere iterata over" (lista per esempio a) e la IEnumerator rappresenta lo stato corrente all'interno di tale iterazione -. Come un cursore di database

E 'un po' strano che la classe non implementa IEnumerable o IEnumerable<T> stesso. Mi aspetto qualcosa di simile:

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

Altri suggerimenti

i bambini è List<int>, che implementa IEnumerable<int> e IEnumerable. Il metodo GetEnumerator() è definito per tali interfacce, non per IEnumerator.

children as IEnumerator dovrebbe portare a nulla.

Non esiste un metodo GetEnumerator() sulla IEnumerator interfaccia. Stai cercando di utilizzare l'interfaccia IEnumerable forse?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top