Sdílet prostřednictvím


HashSet<T>.GetEnumerator Metoda

Definice

Vrátí enumerátor, který iteruje objektem HashSet<T> .

public:
 System::Collections::Generic::HashSet<T>::Enumerator GetEnumerator();
public System.Collections.Generic.HashSet<T>.Enumerator GetEnumerator ();
member this.GetEnumerator : unit -> System.Collections.Generic.HashSet<'T>.Enumerator
Public Function GetEnumerator () As HashSet(Of T).Enumerator

Návraty

Objekt HashSet<T>.Enumerator pro HashSet<T> objekt.

Poznámky

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

Enumerátory lze používat ke čtení dat v kolekci, nikoli však k úpravě zdrojové kolekce.

Zpočátku je enumerátor umístěn před prvním prvkem v kolekci. Na 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.

Vlastnost Current vrací stejný objekt, dokud MoveNext není volána. MoveNext nastaví Current na další prvek.

Pokud MoveNext projde konec kolekce, enumerátor se umístí za poslední prvek v kolekci a MoveNext vrátí false. Když je enumerátor na této pozici, následné volání také MoveNext vrátí false. Pokud je poslední volání MoveNext vráceno false, Current není definováno. Nelze znovu nastavit Current na první prvek kolekce; místo toho musíte vytvořit nový objekt enumerator.

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

Enumerátor nemá výhradní přístup ke kolekci; proto výčet prostřednictvím kolekce není vnitřně procedurou bezpečnou pro přístup z více vláken. Chcete-li zajistit bezpečnost vláken během výčtu, můžete uzamknout kolekci během celého výčtu. Chcete-li více vláknům umožnit přístup ke kolekci pro čtení a zápis, musíte implementovat svou vlastní synchronizaci.

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

Tato metoda je operace O(1).

Platí pro