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>

 

Supporta una iterazione semplice in una raccolta generica.

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

public interface IEnumerator<out T> : IDisposable, IEnumerator

Parametri di tipo

T

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, l'utilizzo foreach si consiglia, anziché modificare direttamente l'enumeratore.

Gli enumeratori possono essere utilizzati per leggere i dati nella raccolta, ma non possono essere utilizzati per modificare la raccolta sottostante.

Inizialmente, l'enumeratore è posizionato prima del primo elemento nella raccolta.In questa posizione, Current è definito.Pertanto, è necessario chiamare MoveNext per spostare l'enumeratore al primo elemento della raccolta prima di leggere il valore di Current.

CurrentRestituisce lo stesso oggetto finché non MoveNext viene chiamato. MoveNextimposta Current all'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 inoltre restituire false.Se l'ultima chiamata a MoveNext restituito false, Current è definito.Non è possibile impostare Current al primo elemento della raccolta. In alternativa, è necessario creare una nuova istanza di enumeratore.

Il Reset metodo viene fornito per l'interoperabilità COM.Non è necessario implementare; al contrario, l'implementatore può generare semplicemente un NotSupportedException.Tuttavia, se si sceglie di eseguire questa operazione, è necessario assicurarsi Nessun chiamante si basa sul Reset funzionalità.

Un enumeratore rimane valido finché la raccolta rimane invariata.Se vengono apportate modifiche alla raccolta, quali aggiunte, modifiche o eliminazioni di elementi, l'enumeratore verrà irrimediabilmente invalidato e la successiva chiamata a MoveNext o Reset genera un InvalidOperationException.

L'enumeratore non ha accesso esclusivo all'insieme. Pertanto, l'enumerazione di una raccolta non è una procedura thread-safe.Per garantire la sicurezza dei thread durante l'enumerazione, è possibile bloccare l'insieme durante l'intera enumerazione.Per consentire la raccolta a cui accedere da più thread per la lettura e scrittura, è necessario implementare una sincronizzazione personalizzata.

Le implementazioni predefinite di raccolte nel System.Collections.Generic dello spazio dei nomi non sono sincronizzati.

Note per gli implementatori:

Implementa questa interfaccia richiede l'implementazione non generica IEnumerator interfaccia.Il MoveNext e Reset metodi non dipendono Te vengono visualizzati solo sull'interfaccia non generica.Il Current proprietà compare in entrambe le interfacce e può restituire tipi diversi.Implementare non generica IEnumerator.Current proprietà come un'implementazione esplicita dell'interfaccia.In questo modo qualsiasi consumer dell'interfaccia non generica utilizzare l'interfaccia generica.

Inoltre, IEnumerator<T> implementa IDisposable, che richiede di implementare il Dispose metodo.Consente di chiudere le connessioni di database o di rilascio di 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, mentre 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 4.5
.NET Framework
Disponibile da 2.0
Portable Class Library
Supportato in: portable .NET platforms
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: