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


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

Определение

Возвращает перечислитель, осуществляющий перебор элементов списка SortedDictionary<TKey,TValue>.

public:
 System::Collections::Generic::SortedDictionary<TKey, TValue>::Enumerator GetEnumerator();
public System.Collections.Generic.SortedDictionary<TKey,TValue>.Enumerator GetEnumerator ();
member this.GetEnumerator : unit -> System.Collections.Generic.SortedDictionary<'Key, 'Value>.Enumerator
Public Function GetEnumerator () As SortedDictionary(Of TKey, TValue).Enumerator

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

Новый объект SortedDictionary<TKey,TValue>.Enumerator для SortedDictionary<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. Если последний вызов MoveNext возвращал false, Current значение не определено. Значение свойства Current не может быть повторно задано первому элементу коллекции; вместо этого следует создать новый экземпляр перечислителя.

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

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

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

Этот метод является операцией O(log n), где n — число.

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

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