Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Interfaccia IEnumerator<T>

 

Data di pubblicazione: ottobre 2016

Supporta una iterazione semplice in una raccolte generica.

Spazio dei nomi:   System.Collections.Generic
Assembly:  mscorlib (in mscorlib.dll)

public interface IEnumerator<out T> : IDisposable, IEnumerator

Parametri tipo

outT

Tipo degli oggetti da enumerare.

NomeDescrizione
System_CAPS_pubpropertyCurrent

Ottiene l'elemento della raccolta in corrispondenza della posizione corrente dell'enumeratore.

NomeDescrizione
System_CAPS_pubmethodDispose()

Esegue attività definite dall'applicazione, come rilasciare o reimpostare risorse non gestite.(Ereditato da IDisposable.)

System_CAPS_pubmethodMoveNext()

Sposta l'enumeratore all'elemento successivo della raccolta.(Ereditato da IEnumerator.)

System_CAPS_pubmethodReset()

Imposta l'enumeratore sulla propria posizione iniziale, ovvero prima del primo elemento nella raccolta.(Ereditato da IEnumerator.)

IEnumerator<T> è l'interfaccia di base per tutti gli enumeratori generici.

Il foreach istruzione del linguaggio c# (for each in C++, For Each in Visual Basic) nasconde la complessità degli enumeratori. Pertanto, si consiglia l'utilizzo di foreach, anziché la modifica diretta dell'enumeratore.

È possibile utilizzare enumeratori per leggere i dati nella raccolta, ma non per modificare la raccolta sottostante.

Inizialmente l'enumeratore è posizionato davanti al primo elemento della raccolta. In questa posizione, la proprietà Current è indefinita. Pertanto, è necessario chiamare il metodo MoveNext per spostare in avanti l'enumeratore, in corrispondenza del primo elemento della raccolta, prima di leggere il valore di Current.

La proprietà Current restituisce lo stesso oggetto finché non viene chiamato il metodo MoveNext. MoveNext imposta Current sull'elemento successivo.

Se MoveNext raggiunge la fine della raccolta, l'enumeratore è posizionato dopo l'ultimo elemento nella raccolta e MoveNext restituisce false. Quando l'enumeratore si trova in questa posizione, le chiamate successive a MoveNext restituiscono false. Se l'ultima chiamata a MoveNext restituito false, Current è definito. Non è possibile impostare nuovamente la proprietà Current sul primo elemento della raccolta; è necessario creare una nuova istanza di enumeratore.

Il Reset metodo è fornito per l'interoperabilità COM. Non devono necessariamente essere implementato; al contrario, l'implementatore può semplicemente generare un NotSupportedException. Tuttavia, se si sceglie di eseguire questa operazione, assicurarsi che nessun chiamante si basa sul Reset funzionalità.

Un enumeratore rimane valido fino a quando la raccolta non subisce modifiche. Se vengono apportate modifiche alla raccolta, ad esempio l'aggiunta, modifica, o l'eliminazione di elementi, l'enumeratore viene invalidato in modo irreversibile e la successiva chiamata a MoveNext o Reset Genera un InvalidOperationException.

L'enumeratore non dispone di accesso esclusivo alla raccolta. L'enumerazione di una raccolta non è quindi una procedura thread-safe. Per assicurare la protezione del thread durante l'enumerazione, è possibile bloccare la raccolta durante l'intera enumerazione. Per consentire l'accesso alla raccolta in lettura e scrittura da parte di più thread, è necessario implementare la propria sincronizzazione.

Le implementazioni predefinite di raccolte nello spazio dei nomi System.Collections.Generic non sono sincronizzate.

Note per gli implementatori:

Implementa questa interfaccia è necessario implementare il metodo non generico IEnumerator interfaccia. Il MoveNext e Resetmetodi non dipendono da T, e vengono visualizzati solo sull'interfaccia non generica. Il Current proprietà viene visualizzata in entrambe le interfacce e può restituire tipi diversi. Implementare il metodo non generico IEnumerator.Current proprietà come un'implementazione esplicita dell'interfaccia. In questo modo qualsiasi consumer dell'interfaccia non generica usare l'interfaccia generica.

Inoltre, IEnumerator<T> implementa IDisposable, che richiede di implementare il Dispose metodo. Ciò consente di chiudere le connessioni di database o rilasciare gli handle di file o operazioni analoghe quando si utilizzano altre risorse. Se non sono presenti risorse aggiuntive per smaltire, fornire un oggetto vuoto Dispose implementazione.

Nell'esempio seguente viene illustrata un'implementazione del IEnumerator<T> interfaccia per una classe di raccolte di oggetti personalizzati. L'oggetto personalizzato è un'istanza del tipo Box, e la classe di raccolta è BoxCollection. Questo esempio di codice fa parte di un esempio più esaustivo fornito per il ICollection<T> interfaccia.


// Defines the enumerator for the Boxes collection.
// (Some prefer this class nested in the collection class.)
public class BoxEnumerator : IEnumerator<Box>
{
    private BoxCollection _collection;
    private int curIndex;
    private Box curBox;


    public BoxEnumerator(BoxCollection collection)
    {
        _collection = collection;
        curIndex = -1;
        curBox = default(Box);

    }

    public bool MoveNext()
    {
        //Avoids going beyond the end of the collection.
        if (++curIndex >= _collection.Count)
        {
            return false;
        }
        else
        {
            // Set current box to next item in collection.
            curBox = _collection[curIndex];
        }
        return true;
    }

    public void Reset() { curIndex = -1; }

    void IDisposable.Dispose() { }

    public Box Current
    {
        get { return curBox; }
    }


    object IEnumerator.Current
    {
        get { return Current; }
    }

}

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 2.0
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: