Stack<T>.Enumerator Struktura
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í.
Vytvoří výčet prvků objektu Stack<T>.
public: value class Stack<T>::Enumerator : System::Collections::Generic::IEnumerator<T>
public struct Stack<T>.Enumerator : System.Collections.Generic.IEnumerator<T>
[System.Serializable]
public struct Stack<T>.Enumerator : System.Collections.Generic.IEnumerator<T>
type Stack<'T>.Enumerator = struct
interface IEnumerator<'T>
interface IEnumerator
interface IDisposable
[<System.Serializable>]
type Stack<'T>.Enumerator = struct
interface IEnumerator<'T>
interface IDisposable
interface IEnumerator
[<System.Serializable>]
type Stack<'T>.Enumerator = struct
interface IEnumerator<'T>
interface IEnumerator
interface IDisposable
Public Structure Stack(Of T).Enumerator
Implements IEnumerator(Of T)
Parametry typu
- T
- Dědičnost
- Atributy
- 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ží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í definován. Proto je nutné před čtením hodnoty Currentvolat MoveNext k posunu enumerátoru na první prvek kolekce.
Current vrátí stejný objekt, dokud MoveNext není volána. MoveNext nastaví Current na další prvek.
Pokud MoveNext předá 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 novou instanci enumeratoru.
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 nástroji System.Collections.Generic se nesynchronují.
Vlastnosti
Current |
Získá prvek na aktuální pozici enumerátoru. |
Metody
Dispose() |
Uvolní všechny prostředky používané nástrojem Stack<T>.Enumerator. |
MoveNext() |
Posune enumerátor na další prvek objektu Stack<T>. |
Explicitní implementace rozhraní
IEnumerator.Current |
Získá prvek na aktuální pozici enumerátoru. |
IEnumerator.Reset() |
Nastaví enumerátor na jeho počáteční pozici, která je před prvním prvkem v kolekci. Tuto třídu nelze dědit. |
Platí pro
Viz také
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro