2010-10-28 11 views

risposta

10

L'interfaccia IEnumerator, se implementata da una classe, consente di essere iterata utilizzando la sintassi foreach predefinita.

Nella classe che deve essere iterata per l'interfaccia IEnumerator definisce una firma del metodo per la funzione GetEnumerator che controlla il ciclo attraverso l'oggetto.

public IEnumerator<OrderLine> GetEnumerator() 
    { 
     for (int i=0;i<maxItems;i++) 
     { 
      yield return item[i]; 
     } 
    } 

Come si può vedere in questo esempio, il cedere dichiarazione consente di tornare il controllo al chiamante senza perdere il suo posto nel enumerazione. Il controllo verrà passato nuovamente alla riga dopo l'istruzione yield quando il chiamante raggiunge l'incremento successivo del ciclo foreach.

+0

di solito si vuole il confronto rigoroso: 'for (int i = 0; i Vlad

+0

Ooops. Ho avuto troppa fretta. Fisso. – JohnFx

+0

Non che IEnumerator sia anche l'interfaccia di base utilizzata dai metodi di estensione definiti in Linq – David

1

Si utilizza raramente IEnumerator in modo esplicito, ma ci sono molti metodi di estensione che funzionano con esso, così come lo foreach. Tutte le collezioni lo implementano ed è un esempio del pattern Iterator.

1

È semplicemente un'interfaccia che consente agli oggetti di eseguire operazioni per semplificare l'iterazione delle raccolte. Si può usare per creare oggetti che iterano su una collezione personalizzata con un costrutto foreach o sintassi simile.