Collection.IEnumerable.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ý iteruje kolekci.
virtual System::Collections::IEnumerator ^ ICollectionGetEnumerator() = System::Collections::IEnumerable::GetEnumerator;
System.Collections.IEnumerator IEnumerable.GetEnumerator ();
abstract member ICollectionGetEnumerator : unit -> System.Collections.IEnumerator
override this.ICollectionGetEnumerator : unit -> System.Collections.IEnumerator
Function ICollectionGetEnumerator () As IEnumerator Implements IEnumerable.GetEnumerator
Návraty
Objekt, IEnumerator který lze použít pro iteraci prostřednictvím kolekce.
Poznámky
Příkaz foreach
jazyka 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. Metoda Reset také vrátí enumerátor zpět na tuto pozici. 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.
Current vrátí stejný objekt, dokud není volána hodnota MoveNext nebo Reset . 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 poslední volání MoveNext vrátí false
, Current není definováno. Pokud chcete znovu nastavit Current první prvek kolekce, můžete volat Reset a potom MoveNext.
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 enumerátor nenávratně zneplatněna a jeho chování není definováno.
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.