Udostępnij za pośrednictwem


Dictionary<TKey,TValue>.KeyCollection.IEnumerable.GetEnumerator Metoda

Definicja

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ć falsewartość . 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).

Dotyczy

Zobacz też