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

Определение

Возвращает перечислитель, выполняющий перебор элементов в коллекции.

 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

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

IEnumerator

Объект IEnumerator, который может использоваться для итерации элементов коллекции.

Реализации

Комментарии

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

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

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

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

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

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

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

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

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

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

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

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