Il presente articolo è stato tradotto manualmente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale.
Traduzione
Originale
Questo argomento non è stato ancora valutato - Valuta questo argomento

Interfaccia IEnumerator<T>

Supporta una iterazione semplice in un insieme generico.

Spazio dei nomi:  System.Collections.Generic
Assembly:  mscorlib (in mscorlib.dll)
public interface IEnumerator<out T> : IDisposable, 
	IEnumerator

Parametri di tipo

out T

Tipo degli oggetti da enumerare.

Il parametro di questo tipo è covariante. Ciò significa che è possibile utilizzare il tipo specificato o qualsiasi tipo più derivato. Per ulteriori informazioni sulla covarianza e la controvarianza, vedere Covarianza e controvarianza nei generics.

Il tipo IEnumerator<T> espone i seguenti membri.

  Nome Descrizione
Proprietà pubblica Supportato da XNA Framework 78dfe2yb.PortableClassLibrary(it-it,VS.100).gif Current Ottiene l'elemento corrente dell'insieme. (Ereditato da IEnumerator)
Proprietà pubblica Supportato da XNA Framework 78dfe2yb.PortableClassLibrary(it-it,VS.100).gif Current Ottiene l'elemento dell'insieme in corrispondenza della posizione corrente dell'enumeratore.
In alto
  Nome Descrizione
Metodo pubblico Supportato da XNA Framework 78dfe2yb.PortableClassLibrary(it-it,VS.100).gif Dispose Esegue attività definite dall'applicazione, ad esempio libera, rilascia o reimposta risorse non gestite. (Ereditato da IDisposable)
Metodo pubblico Supportato da XNA Framework 78dfe2yb.PortableClassLibrary(it-it,VS.100).gif MoveNext Consente di spostare l'enumeratore all'elemento successivo dell'insieme. (Ereditato da IEnumerator)
Metodo pubblico Supportato da XNA Framework 78dfe2yb.PortableClassLibrary(it-it,VS.100).gif Reset Imposta l'enumeratore sulla propria posizione iniziale, ovvero prima del primo elemento nell'insieme. (Ereditato da IEnumerator)
In alto

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

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

Gli enumeratori possono essere utilizzati per leggere i dati dell'insieme, ma non per modificare l'insieme sottostante.

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

Current restituisce lo stesso oggetto fino alla chiamata di MoveNext. MoveNext imposta Current sull'elemento successivo.

Se il metodo MoveNext supera la fine dell'insieme, l'enumeratore viene posizionato dopo l'ultimo elemento dell'insieme e il metodo MoveNext restituisce false. Quando l'enumeratore si trova in questa posizione, anche le successive chiamate a MoveNext restituiscono false. Se l'ultima chiamata al metodo MoveNext ha restituito false, la proprietà Current non è definita. Non è possibile impostare nuovamente la proprietà Current sul primo elemento dell'insieme; è necessario creare una nuova istanza di enumeratore.

Il metodo Reset viene fornito per l'interoperabilità COM. Non deve essere necessariamente implementato. È sufficiente che l'implementatore generi un'eccezione NotSupportedException.

Un enumeratore rimane valido fino a quando l'insieme rimane invariato. Se vengono apportate modifiche all'insieme, ad esempio l'aggiunta, la modifica o l'eliminazione di elementi, l'enumeratore verrà irrimediabilmente invalidato e il relativo comportamento sarà non definito.

L'enumeratore non dispone di accesso esclusivo all'insieme, pertanto il processo di enumerazione di un insieme non è di per sé thread-safe. Per garantire che l'enumerazione sia thread-safe, è possibile bloccare l'insieme durante l'intera enumerazione. Per consentire l'accesso all'insieme in lettura e scrittura da parte di più thread, è necessario implementare la propria sincronizzazione.

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

Note per gli implementatori

Per poter implementare questa interfaccia è necessario implementare l'interfaccia non generica IEnumerator. I metodi MoveNext e Reset non dipendono da T e vengono visualizzati soltanto su interfacce non generiche. La proprietà Current compare in entrambe le interfacce e può restituire tipi diversi. Implementare la proprietà non generica IEnumerator.Current come implementazione dell'interfaccia esplicita. Questo consente a qualsiasi consumer dell'interfaccia non generica di utilizzare l'interfaccia generica.

Nell'esempio di codice riportato di seguito viene illustrata l'implementazione dell'interfaccia IEnumerator<T> per una classe di insiemi di oggetti personalizzati. L'oggetto personalizzato è un'istanza del tipo Box e la classe di insieme è BoxCollection. Questo esempio di codice fa parte di un esempio più esaustivo fornito per l'interfaccia ICollection<T>.



// 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; }
    }

}


.NET Framework

Supportato in: 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1

Supportato in:

Windows 7, Windows Vista SP1 o versione successiva, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (componenti di base del server non supportati), Windows Server 2008 R2 (componenti di base del server supportati con SP1 o versione successiva), Windows Server 2003 SP2

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.
Il documento è risultato utile?
(1500 caratteri rimanenti)
Contenuto della community Aggiungi