Udostępnij za pośrednictwem


SortedDictionary<TKey,TValue>.GetEnumerator Metoda

Definicja

Zwraca moduł wyliczający, który iteruje przez element SortedDictionary<TKey,TValue>.

public:
 System::Collections::Generic::SortedDictionary<TKey, TValue>::Enumerator GetEnumerator();
public System.Collections.Generic.SortedDictionary<TKey,TValue>.Enumerator GetEnumerator ();
member this.GetEnumerator : unit -> System.Collections.Generic.SortedDictionary<'Key, 'Value>.Enumerator
Public Function GetEnumerator () As SortedDictionary(Of TKey, TValue).Enumerator

Zwraca

A SortedDictionary<TKey,TValue>.Enumerator dla .SortedDictionary<TKey,TValue>

Uwagi

Na potrzeby wyliczania każdy element jest strukturą reprezentującą KeyValuePair<TKey,TValue> wartość i jego klucz.

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.

Słownik jest utrzymywany w kolejności posortowanej przy użyciu drzewa wewnętrznego. Każdy nowy element jest umieszczony w prawidłowej pozycji sortowania, a drzewo jest dostosowywane w celu zachowania kolejności sortowania za każdym razem, gdy element zostanie usunięty. Podczas wyliczania kolejność sortowania jest zachowywana.

Początkowo moduł wyliczający jest umieszczony przed pierwszym elementem w kolekcji. Na tym stanowisku Current właściwość jest niezdefiniowana. W związku z tym należy wywołać metodę MoveNext , aby przejść do pierwszego elementu kolekcji przed odczytaniem wartości Current.

Właściwość Current zwraca ten sam element do momentu wywołania MoveNext metody . 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. Nie można ponownie ustawić Current elementu na pierwszy element kolekcji. Zamiast tego należy utworzyć nowe wystąpienie modułu wyliczającego.

Moduł wyliczający zachowuje ważność tak długo, jak długo kolekcja pozostaje niezmieniona. W przypadku wprowadzania zmian w kolekcji, takich jak dodawanie, modyfikowanie lub usuwanie elementów, moduł wyliczający jest nieodwracalnie unieważniany, a następne wywołanie MoveNext metody lub IEnumerator.Reset zgłasza InvalidOperationExceptionbłąd .

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 System.Collections.Generic przestrzeni nazw nie są synchronizowane.

Ta metoda jest operacją O(log n), gdzie n jest liczone.

Dotyczy

Zobacz też