Dictionary<TKey,TValue>.KeyCollection.Enumerator Структура
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Выполняет перечисление элементов коллекции Dictionary<TKey,TValue>.KeyCollection.
public: value class Dictionary<TKey, TValue>::KeyCollection::Enumerator : System::Collections::Generic::IEnumerator<TKey>
public struct Dictionary<TKey,TValue>.KeyCollection.Enumerator : System.Collections.Generic.IEnumerator<TKey>
[System.Serializable]
public struct Dictionary<TKey,TValue>.KeyCollection.Enumerator : System.Collections.Generic.IEnumerator<TKey>
type Dictionary<'Key, 'Value>.KeyCollection.Enumerator = struct
interface IEnumerator<'Key>
interface IEnumerator
interface IDisposable
[<System.Serializable>]
type Dictionary<'Key, 'Value>.KeyCollection.Enumerator = struct
interface IEnumerator<'Key>
interface IDisposable
interface IEnumerator
Public Structure Dictionary(Of TKey, TValue).KeyCollection.Enumerator
Implements IEnumerator(Of TKey)
Параметры типа
- TKey
- TValue
- Наследование
- Атрибуты
- Реализации
Комментарии
Оператор foreach
языка C# (for each
в C++ в For Each
Visual Basic) скрывает сложность перечислителей. Поэтому рекомендуется вместо непосредственного использования перечислителя применять ключевое слово foreach
.
Перечислители могут использоваться для чтения данных в коллекции, но не для ее изменения.
Изначально перечислитель располагается перед первым элементом коллекции. В этой позиции значение свойства Current не определено. Необходимо вызвать метод MoveNext , чтобы перейти перечислитель к первому элементу коллекции, прежде чем считывать значение Current.
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 не синхронизируются.
Свойства
Current |
Возвращает элемент, расположенный в текущей позиции перечислителя. |
Методы
Dispose() |
Освобождает все ресурсы, занятые модулем Dictionary<TKey,TValue>.KeyCollection.Enumerator. |
MoveNext() |
Перемещает перечислитель к следующему элементу коллекции Dictionary<TKey,TValue>.KeyCollection. |
Явные реализации интерфейса
IEnumerator.Current |
Возвращает элемент, расположенный в текущей позиции перечислителя. |
IEnumerator.Reset() |
Устанавливает перечислитель в его начальное положение, т. е. перед первым элементом коллекции. |