Dictionary<TKey,TValue>.GetEnumerator Метод

Определение

Возвращает перечислитель, который выполняет итерацию через Dictionary<TKey,TValue>.

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

Возвращаемое значение

Структура Dictionary<TKey,TValue>.Enumerator для Dictionary<TKey,TValue>.

Комментарии

Для перечисления каждый элемент представляет KeyValuePair<TKey,TValue> собой структуру, представляющую значение и его ключ.

Оператор foreach языка C# (For Each в Visual Basic) скрывает сложность перечислителей. Поэтому рекомендуется использовать foreach вместо непосредственного управления перечислителем.

Перечислители можно использовать для чтения данных в коллекции, но их нельзя использовать для изменения базовой коллекции.

Изначально перечислитель размещается перед первым элементом в коллекции. На этой позиции Current не определен. Перед чтением значения Currentнеобходимо вызвать MoveNext метод, чтобы перенаставить перечислитель к первому элементу коллекции.

Свойство Current возвращает тот же элемент до MoveNext вызова метода. MoveNext задает Current для следующего элемента.

Если MoveNext передает конец коллекции, перечислитель размещается после последнего элемента в коллекции и MoveNext возвращается false. Если перечислитель находится в этой позиции, последующие вызовы MoveNext также возвращаются false. Если последний вызов MoveNext возвращен false, Current не определен. Нельзя снова задать Current первый элемент коллекции. Вместо этого необходимо создать новый экземпляр перечислителя.

Перечислитель остается допустимым, пока коллекция остается неизменной. Если изменения вносятся в коллекцию, например добавление элементов или изменение емкости, перечислитель безвозвратно недопустим и следующий вызов MoveNext или IEnumerator.Reset вызывает исключение InvalidOperationException.

Только .NET Core 3.0+ — единственные методы, которые не являются недопустимыми перечислителямиRemove.Clear

Перечислитель не имеет монопольного доступа к коллекции; Таким образом, перечисление через коллекцию по сути не является потокобезопасной процедурой. Чтобы гарантировать безопасность потоков во время перечисления, можно заблокировать коллекцию во время всего перечисления. Чтобы разрешить доступ к коллекции несколькими потоками для чтения и записи, необходимо реализовать собственную синхронизацию.

Реализации коллекций по умолчанию в System.Collections.Generic пространстве имен не синхронизируются.

Этот метод является операцией O(1).

Применяется к

См. также раздел