Прочитать на английском

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


ResourceSet.GetEnumerator Метод

Определение

Возвращает IDictionaryEnumerator, которые могут выполнять итерацию через ResourceSet.

C#
public virtual System.Collections.IDictionaryEnumerator GetEnumerator();
C#
[System.Runtime.InteropServices.ComVisible(false)]
public virtual System.Collections.IDictionaryEnumerator GetEnumerator();

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

IDictionaryEnumerator для этого ResourceSet.

Атрибуты

Исключения

Набор ресурсов закрыт или удален.

Примеры

В следующем примере показано, как создать ResourceSetrs для файла items.resources. Затем метод GetEnumerator используется для создания IDictionaryEnumerator для rs. IDictionaryEnumerator выполняет итерацию rs и отображает содержимое консоли.

C#
using System;
using System.Resources;
using System.Collections;

class EnumerateResources 
{
    public static void Main() 
    {
        // Create a ResourceSet for the file items.resources.
        ResourceSet rs = new ResourceSet("items.resources"); 

        // Create an IDictionaryEnumerator to read the data in the ResourceSet.
        IDictionaryEnumerator id = rs.GetEnumerator(); 

        // Iterate through the ResourceSet and display the contents to the console. 
        while(id.MoveNext())
          Console.WriteLine("\n[{0}] \t{1}", id.Key, id.Value); 

        rs.Close();
    }
}

Комментарии

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

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

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

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

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

Свойство IDictionaryEnumerator.Entry можно использовать для доступа к значению, хранящееся в текущем элементе. Используйте свойство IDictionaryEnumerator.Key для доступа к ключу текущего элемента. Используйте свойство IDictionaryEnumerator.Value для доступа к значению текущего элемента.

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

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

Продукт Версии
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1