ResourceSet.GetEnumerator Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Возвращает итерацию IDictionaryEnumerator , которая может выполнять итерацию ResourceSet.
public:
virtual System::Collections::IDictionaryEnumerator ^ GetEnumerator();
public virtual System.Collections.IDictionaryEnumerator GetEnumerator();
[System.Runtime.InteropServices.ComVisible(false)]
public virtual System.Collections.IDictionaryEnumerator GetEnumerator();
abstract member GetEnumerator : unit -> System.Collections.IDictionaryEnumerator
override this.GetEnumerator : unit -> System.Collections.IDictionaryEnumerator
[<System.Runtime.InteropServices.ComVisible(false)>]
abstract member GetEnumerator : unit -> System.Collections.IDictionaryEnumerator
override this.GetEnumerator : unit -> System.Collections.IDictionaryEnumerator
Public Overridable Function GetEnumerator () As IDictionaryEnumerator
Возвращаемое значение
Для IDictionaryEnumerator этого ResourceSet.
- Атрибуты
Исключения
Набор ресурсов закрыт или удален.
Примеры
В следующем примере показано, как создать ResourceSetrs файл items.resources.
GetEnumerator Далее метод используется для создания IDictionaryEnumerator для rs. Выполняет IDictionaryEnumerator итерацию rs и отображает содержимое консоли.
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();
}
}
Imports System.Resources
Imports System.Collections
Class EnumerateResources
Public Shared Sub Main()
' Create a ResourceSet for the file items.resources.
Dim rs As New ResourceSet("items.resources")
' Create an IDictionaryEnumerator to read the data in the ResourceSet.
Dim id As IDictionaryEnumerator = rs.GetEnumerator()
' Iterate through the ResourceSet and display the contents to the console.
While id.MoveNext()
Console.WriteLine(ControlChars.NewLine + "[{0}] " + ControlChars.Tab + "{1}", id.Key, id.Value)
End While
rs.Close()
End Sub
End Class
Комментарии
Перечислители разрешают только чтение данных в коллекции. Перечислители нельзя использовать для изменения базовой коллекции.
Изначально перечислитель размещается перед первым элементом в коллекции. Reset также возвращает перечислитель обратно в эту позицию. В этой позиции вызов Current вызывает исключение. Поэтому перед чтением значения MoveNextнеобходимо вызвать Current перечислитель к первому элементу коллекции.
Current возвращает один и тот же объект, пока MoveNextReset не вызывается либо вызывается. MoveNext задает Current для следующего элемента.
После прохождения конца коллекции перечислитель размещается после последнего элемента в коллекции и возвращает вызов MoveNextfalse. Если последний вызов MoveNext возвращен false, вызов Current вызывает исключение. Чтобы снова задать Current для первого элемента коллекции, можно вызвать Reset после этого MoveNext.
Перечислитель остается допустимым, пока коллекция остается неизменной. Если изменения вносятся в коллекцию, например добавление, изменение или удаление элементов, перечислитель неустранимо недопустим и следующий вызов MoveNext или Reset вызывает исключение InvalidOperationException. Если коллекция изменяется между MoveNext и Current, Current возвращает элемент, которому он задан, даже если перечислитель уже недопустим.
Свойство можно использовать IDictionaryEnumerator.Entry для доступа к значению, хранящееся в текущем элементе. IDictionaryEnumerator.Key Используйте свойство для доступа к ключу текущего элемента. IDictionaryEnumerator.Value Используйте свойство для доступа к значению текущего элемента.
Перечислитель не имеет монопольного доступа к коллекции; Таким образом, перечисление через коллекцию по сути не является потокобезопасной процедурой. Даже если коллекция синхронизирована, другие потоки по-прежнему могут изменить коллекцию, что приводит к возникновению исключения перечислителем. Чтобы гарантировать безопасность потоков во время перечисления, можно заблокировать коллекцию во время всего перечисления или поймать исключения, полученные из изменений, внесенных другими потоками.