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 возвращает один и тот же объект, пока MoveNextReset не вызывается либо вызывается. MoveNext задает Current для следующего элемента.
Если MoveNext передает конец коллекции, перечислитель размещается после последнего элемента в коллекции и MoveNext возвращается false. Если перечислитель находится в этой позиции, последующие вызовы MoveNext также возвращаются false. Если последний вызов MoveNext возвращается false, Current не определен. Чтобы снова задать Current для первого элемента коллекции, можно вызвать Reset после этого MoveNext.
Перечислитель остается допустимым, пока коллекция остается неизменной. Если изменения вносятся в коллекцию, например добавление, изменение или удаление элементов, перечислитель неустранимо недействителен и его поведение не определено.
Перечислитель не имеет монопольного доступа к коллекции; Таким образом, перечисление через коллекцию по сути не является потокобезопасной процедурой. Чтобы гарантировать безопасность потоков во время перечисления, можно заблокировать коллекцию во время всего перечисления. Чтобы разрешить доступ к коллекции несколькими потоками для чтения и записи, необходимо реализовать собственную синхронизацию.