Поделиться через


Collection.IEnumerable.GetEnumerator Метод

Определение

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

 virtual System::Collections::IEnumerator ^ ICollectionGetEnumerator() = System::Collections::IEnumerable::GetEnumerator;
System.Collections.IEnumerator IEnumerable.GetEnumerator ();
abstract member ICollectionGetEnumerator : unit -> System.Collections.IEnumerator
override this.ICollectionGetEnumerator : unit -> System.Collections.IEnumerator
Function ICollectionGetEnumerator () As IEnumerator Implements IEnumerable.GetEnumerator

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

Объект IEnumerator, который используется для прохода по коллекции.

Комментарии

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

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

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

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

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

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

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

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

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