Sdílet prostřednictvím


HashSet<T>.Enumerator Struktura

Definice

Vytvoří výčet prvků objektu HashSet<T> .

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)

Parametry typu

T
Dědičnost
HashSet<T>.Enumerator
Atributy
Implementuje

Poznámky

Příkaz foreach jazyka C# (For Each v jazyce Visual Basic) skryje složitost výčtů. Proto se místo přímé manipulace s enumerátorem doporučuje použití foreach .

Enumerátory lze použít ke čtení dat v kolekci, ale nelze je použít k úpravě podkladové kolekce.

Na začátku je enumerátor umístěn před prvním prvkem v kolekci. V této pozici Current není vlastnost definována. Proto je nutné volat metodu MoveNext pro přechod enumerátoru na první prvek kolekce před čtením hodnoty Current.

Current vrátí stejný objekt, dokud MoveNext nebude volána. MoveNext nastaví Current na další prvek.

Pokud MoveNext předá konec kolekce, enumerátor je umístěn za posledním prvkem v kolekci a MoveNext vrátí .false Pokud je enumerátor na této pozici, následná volání vrátit MoveNext také false. Pokud se vrátí poslední volání MoveNextfalse, Current není definováno. Znovu nelze nastavit Current první prvek kolekce. Místo toho je nutné vytvořit nový objekt enumerátoru.

Enumerátor zůstane platný, dokud kolekce zůstane beze změny. Pokud jsou v kolekci provedeny změny, například přidání, úpravy nebo odstranění prvků, enumerátor je nenávratně neplatný a další volání MoveNext nebo IEnumerator.Reset vyvolá výjimku InvalidOperationException.

Enumerátor nemá výhradní přístup k kolekci; proto výčet prostřednictvím kolekce není vnitřně bezpečným postupem pro přístup z více vláken. Chcete-li zaručit bezpečnost vláken během výčtu, můžete kolekci uzamknout během celého výčtu. Pokud chcete povolit přístup ke kolekci více vlákny pro čtení a zápis, musíte implementovat vlastní synchronizaci.

Výchozí implementace kolekcí v System.Collections.Generic oboru názvů nejsou synchronizovány.

Vlastnosti

Name Description
Current

Získá prvek na aktuální pozici enumerátoru.

Metody

Name Description
Dispose()

Uvolní všechny prostředky používané objektem HashSet<T>.Enumerator .

MoveNext()

Přejde enumerátor na další prvek HashSet<T> kolekce.

Explicitní implementace rozhraní

Name Description
IEnumerator.Current

Získá prvek na aktuální pozici enumerátoru.

IEnumerator.Reset()

Nastaví enumerátor na počáteční pozici, která je před prvním prvkem v kolekci.

Platí pro