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
в C++, For Each
в Visual Basic) скрывает сложность перечислителей. Поэтому рекомендуется вместо непосредственного использования перечислителя применять ключевое слово foreach
.
Перечислители могут использоваться для чтения данных в коллекции, но не для ее изменения.
Изначально перечислитель располагается перед первым элементом коллекции. В этой позиции значение свойства Current не определено. Необходимо вызвать MoveNext метод, чтобы перейти перечислителя к первому элементу коллекции, прежде чем считывать значение Current.
Свойство Current возвращает тот же элемент до MoveNext вызова метода. MoveNext задает Current в качестве значения для следующего элемента.
Если MoveNext передает конец коллекции, перечислитель позиционируется после последнего элемента в коллекции и MoveNext возвращает .false
Если перечислитель находится в этой позиции, последующие вызовы также MoveNext возвращаются false
. Если последний возвращенный false
вызов MoveNext не Current определен. Значение свойства Current не может быть повторно задано первому элементу коллекции; вместо этого следует создать новый экземпляр перечислителя.
Перечислитель является допустимым до тех пор, пока коллекция остается неизменной. Если в коллекцию вносятся изменения, например добавление элементов или изменение емкости, перечислитель становится недействительным, а следующий вызов MoveNext или IEnumerator.Reset вызов вызывает исключение InvalidOperationException.
Только .NET Core 3.0+ — единственные методы, которые не делают перечислителей недействительными, и Remove Clear.
У перечислителя нет эксклюзивного доступа к коллекции, поэтому перечисление коллекции не является потокобезопасной процедурой. Чтобы гарантировать потокобезопасность, можно заблокировать коллекцию на время всего перечисления. Чтобы разрешить доступ к коллекции из нескольких потоков для чтения и записи, необходимо реализовать собственную синхронизацию.
Используемые по умолчанию реализации коллекций в пространстве имен System.Collections.Generic не синхронизированы.
Этот метод является операцией O(1).