SortedDictionary<TKey,TValue>.KeyCollection.IEnumerable<TKey>.GetEnumerator Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Získá enumerátor, který provádí iteraci v kolekci.
virtual System::Collections::Generic::IEnumerator<TKey> ^ System.Collections.Generic.IEnumerable<TKey>.GetEnumerator() = System::Collections::Generic::IEnumerable<TKey>::GetEnumerator;
System.Collections.Generic.IEnumerator<TKey> IEnumerable<TKey>.GetEnumerator ();
abstract member System.Collections.Generic.IEnumerable<TKey>.GetEnumerator : unit -> System.Collections.Generic.IEnumerator<'Key>
override this.System.Collections.Generic.IEnumerable<TKey>.GetEnumerator : unit -> System.Collections.Generic.IEnumerator<'Key>
Function GetEnumerator () As IEnumerator(Of TKey) Implements IEnumerable(Of TKey).GetEnumerator
Návraty
Enumerátor IEnumerator<T>, který lze použít pro iteraci prostřednictvím kolekce
Implementuje
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žívat 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. V této pozici Current je vlastnost nedefinovaná. Proto je nutné volat metodu MoveNext pro přechod enumerátoru na první prvek kolekce před čtením hodnoty Current.
Vlastnost Current vrátí stejný objekt, dokud MoveNext není volána. MoveNext nastaví Current na další prvek.
Pokud MoveNext přejde na konec kolekce, enumerátor se umístí za poslední prvek v kolekci a MoveNext vrátí hodnotu false. Když je enumerátor na této pozici, následná volání MoveNext také vrátí hodnotu 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 novou instanci 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í, úprava nebo odstranění prvků, je výčet nenávratně zneplatněný a další volání MoveNext nebo 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. Abyste zajistili bezpečnost vláken během výčtu, můžete kolekci uzamknout 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ů se nesynchronují.
Tato metoda je operace O(log n), kde n je počet prvků v kolekci.