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 namespace System;
using namespace System::Resources;
using namespace System::Collections;
int main()
{
// Create a ResourceSet for the file items.resources.
ResourceSet^ rs = gcnew 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();
}
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 возвращает тот же объект до вызова MoveNext или Reset. MoveNext задает Current следующему элементу.
После завершения коллекции перечислитель размещается после последнего элемента в коллекции, а вызов MoveNext возвращает false
. Если последний вызов MoveNext возвращен false
, вызов Current вызывает исключение. Чтобы снова задать Current первому элементу коллекции, можно вызвать Reset, за которым следует MoveNext.
Перечислитель остается допустимым, пока коллекция остается неизменной. Если изменения вносятся в коллекцию, например добавление, изменение или удаление элементов, перечислитель неустранимо недопустим, а следующий вызов MoveNext или Reset вызывает InvalidOperationException. Если коллекция изменяется между MoveNext и Current, Current возвращает заданный элемент, даже если перечислитель уже недопустим.
Свойство IDictionaryEnumerator.Entry можно использовать для доступа к значению, хранящееся в текущем элементе. Используйте свойство IDictionaryEnumerator.Key для доступа к ключу текущего элемента. Используйте свойство IDictionaryEnumerator.Value для доступа к значению текущего элемента.
Перечислитель не имеет монопольного доступа к коллекции; Таким образом, перечисление через коллекцию по сути не является потокобезопасной процедурой. Даже если коллекция синхронизирована, другие потоки по-прежнему могут изменить коллекцию, что приводит к возникновению исключения перечислителем. Чтобы гарантировать безопасность потоков во время перечисления, можно заблокировать коллекцию во время всего перечисления или поймать исключения, полученные из изменений, внесенных другими потоками.