Dictionary<TKey,TValue>.KeyCollection.Enumerator Struktura
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.
Wylicza elementy elementu Dictionary<TKey,TValue>.KeyCollection.
public: value class Dictionary<TKey, TValue>::KeyCollection::Enumerator : System::Collections::Generic::IEnumerator<TKey>
public struct Dictionary<TKey,TValue>.KeyCollection.Enumerator : System.Collections.Generic.IEnumerator<TKey>
[System.Serializable]
public struct Dictionary<TKey,TValue>.KeyCollection.Enumerator : System.Collections.Generic.IEnumerator<TKey>
type Dictionary<'Key, 'Value>.KeyCollection.Enumerator = struct
interface IEnumerator<'Key>
interface IEnumerator
interface IDisposable
[<System.Serializable>]
type Dictionary<'Key, 'Value>.KeyCollection.Enumerator = struct
interface IEnumerator<'Key>
interface IDisposable
interface IEnumerator
Public Structure Dictionary(Of TKey, TValue).KeyCollection.Enumerator
Implements IEnumerator(Of TKey)
Parametry typu
- TKey
- TValue
- Dziedziczenie
- Atrybuty
- 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. Na tym stanowisku Current jest niezdefiniowany. Przed odczytaniem wartości Currentnależy wywołać MoveNext metodę , aby przejść do pierwszego elementu kolekcji.
Current Metoda zwraca ten sam obiekt, dopóki MoveNext nie zostanie wywołana. 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. 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. 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.
Właściwości
Current |
Pobiera element w bieżącej pozycji modułu wyliczającego. |
Metody
Dispose() |
Zwalnia wszelkie zasoby używane przez element Dictionary<TKey,TValue>.KeyCollection.Enumerator. |
MoveNext() |
Przechodzi do następnego elementu modułu wyliczającego Dictionary<TKey,TValue>.KeyCollection. |
Jawne implementacje interfejsu
IEnumerator.Current |
Pobiera element w bieżącej pozycji modułu wyliczającego. |
IEnumerator.Reset() |
Ustawia moduł wyliczający na jego pozycję początkową, która jest przed pierwszym elementem w kolekcji. |