Dictionary<TKey,TValue>.KeyCollection.IEnumerable.GetEnumerator Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Zwraca moduł wyliczający, który iteruje po kolekcji.
virtual System::Collections::IEnumerator ^ System.Collections.IEnumerable.GetEnumerator() = System::Collections::IEnumerable::GetEnumerator;
System.Collections.IEnumerator IEnumerable.GetEnumerator ();
abstract member System.Collections.IEnumerable.GetEnumerator : unit -> System.Collections.IEnumerator
override this.System.Collections.IEnumerable.GetEnumerator : unit -> System.Collections.IEnumerator
Function GetEnumerator () As IEnumerator Implements IEnumerable.GetEnumerator
Zwraca
Obiekt IEnumerator, który może być używany do iterowania po kolekcji.
Implementuje
Uwagi
Instrukcja foreach
języka C# (for each
w języku C++, For Each
w Visual Basic) ukrywa złożoność modułów wyliczania. Dlatego użycie foreach
jest zalecane zamiast bezpośredniego manipulowania modułem wyliczającym.
Moduły wyliczające mogą służyć do odczytu danych w kolekcji, ale nie można za ich pomocą modyfikować kolekcji źródłowej.
Początkowo moduł wyliczający jest umieszczony przed pierwszym elementem w kolekcji. Reset powoduje również powrót modułu wyliczającego do tej pozycji. Na tym stanowisku Current jest niezdefiniowany. W związku z tym należy wywołać metodę MoveNext , aby przejść do pierwszego elementu kolekcji przed odczytaniem wartości Current.
Current Metoda zwraca ten sam obiekt do momentu wywołania metody MoveNext lub Reset . MoveNext ustawia Current element na następny.
Jeśli MoveNext przejdzie koniec kolekcji, moduł wyliczający zostanie umieszczony po ostatnim elemecie w kolekcji i MoveNext zwróci wartość false
. Gdy moduł wyliczający znajduje się na tym stanowisku, kolejne wywołania , aby MoveNext również zwrócić false
wartość . Jeśli ostatnie wywołanie zwracane MoveNextfalse
, Current jest niezdefiniowane. Aby ponownie ustawić Current element na pierwszy element kolekcji, możesz wywołać Reset metodę , a następnie .MoveNext
Moduł wyliczający zachowuje ważność tak długo, jak długo kolekcja pozostaje niezmieniona. Jeśli w kolekcji zostaną wprowadzone zmiany, takie jak dodanie elementów lub zmiana pojemności, moduł wyliczający zostanie nieodwracalnie unieważniony, a następne wywołanie MoveNext metody lub IEnumerator.Reset zgłosi błąd InvalidOperationException.
Tylko platforma .NET Core 3.0 lub nowsza: jedynymi metodami mutowania, które nie unieważniają modułów wyliczających, są Remove i Clear.
Moduł wyliczający nie ma wyłącznego dostępu do kolekcji, w związku z tym wyliczanie w kolekcji nie jest wewnętrznie procedurą odporną na wielowątkowość. Aby zagwarantować bezpieczeństwo wątków podczas wyliczania, można zablokować kolekcję podczas całego procesu wyliczania. Aby zezwolić wielu wątkom na dostęp do kolekcji w celu odczytu i zapisu danych, należy zaimplementować własny mechanizm synchronizacji.
Domyślne implementacje kolekcji w programie System.Collections.Generic nie są synchronizowane.
Ta metoda jest operacją O(1).