Condividi tramite


HashSet<T>.Enumerator Struct

Definizione

Enumera gli elementi di un HashSet<T> oggetto .

public: value class HashSet<T>::Enumerator : System::Collections::Generic::IEnumerator<T>
public struct HashSet<T>.Enumerator : System.Collections.Generic.IEnumerator<T>
[System.Serializable]
public struct HashSet<T>.Enumerator : System.Collections.Generic.IEnumerator<T>
type HashSet<'T>.Enumerator = struct
    interface IEnumerator<'T>
    interface IEnumerator
    interface IDisposable
[<System.Serializable>]
type HashSet<'T>.Enumerator = struct
    interface IEnumerator<'T>
    interface IDisposable
    interface IEnumerator
Public Structure HashSet(Of T).Enumerator
Implements IEnumerator(Of T)

Parametri di tipo

T
Ereditarietà
HashSet<T>.Enumerator
Attributi
Implementazioni

Commenti

L'istruzione foreach del linguaggio C# (For Each in Visual Basic) nasconde la complessità degli enumeratori. Pertanto, è consigliabile usare foreach anziché modificare direttamente l'enumeratore.

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

Inizialmente, l'enumeratore viene posizionato prima del primo elemento della raccolta. In questa posizione, la Current proprietà non è definita. Pertanto, è necessario chiamare il MoveNext metodo per far avanzare l'enumeratore al primo elemento della raccolta prima di leggere il valore di Current.

Current restituisce lo stesso oggetto finché non MoveNext viene chiamato . MoveNext imposta Current sull'elemento successivo.

Se MoveNext passa la fine della raccolta, l'enumeratore viene posizionato dopo l'ultimo elemento della raccolta e MoveNext restituisce false. Quando l'enumeratore si trova in questa posizione, le chiamate successive per MoveNext restituire falseanche . Se l'ultima chiamata a MoveNext restituisce false, Current non è definita. Non è possibile impostare Current di nuovo sul primo elemento della raccolta. È invece necessario creare un nuovo oggetto enumeratore.

Un enumeratore rimane valido finché la raccolta rimane invariata. Se vengono apportate modifiche alla raccolta, ad esempio l'aggiunta, la modifica o l'eliminazione di elementi, l'enumeratore viene invalidato in modo irreversibile e la chiamata successiva a MoveNext o IEnumerator.Reset genera un'eccezione InvalidOperationException.

L'enumeratore non ha accesso esclusivo alla raccolta; pertanto, l'enumerazione tramite una raccolta non è intrinsecamente una procedura thread-safe. Per garantire la thread safety durante l'enumerazione, è possibile bloccare la raccolta durante l'intera enumerazione. Per consentire l'accesso alla raccolta da parte di più thread per la lettura e la scrittura, è necessario implementare la propria sincronizzazione.

Le implementazioni predefinite delle raccolte nello System.Collections.Generic spazio dei nomi non vengono sincronizzate.

Proprietà

Nome Descrizione
Current

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

Metodi

Nome Descrizione
Dispose()

Rilascia tutte le risorse utilizzate da un HashSet<T>.Enumerator oggetto .

MoveNext()

Sposta l'enumeratore all'elemento successivo della HashSet<T> raccolta.

Implementazioni dell'interfaccia esplicita

Nome Descrizione
IEnumerator.Current

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

IEnumerator.Reset()

Imposta l'enumeratore sulla posizione iniziale, ovvero prima del primo elemento della raccolta.

Si applica a