2. Организовать цикл, в котором вызывается методMoveNext. Повторять цикл до тех пор, пока методMoveNext возвращает логическое значениеtrue.
3. Получить в цикле каждый элемент коллекции с помощью свойстваCurrent.
Ниже приведен пример программы, в которой реализуется данная процедура. В этой программе используется классArrayList,но общие принципы циклического обращения к элементам коллекции с помощью перечислителя остаются неизменными для коллекций любого типа, в том числе и обобщенных.
// Продемонстрировать применение перечислителя.
using System;
using System.Collections;
class EnumeratorDemo { static void Main {
ArrayList list = new ArrayList(1);
for(int i=0; i < 10; i++) list.Add(i);
// Использовать перечислитель для доступа к списку.
IEnumerator etr = list.GetEnumerator; while(etr.MoveNext )
Console.Write(etr.Current + " ") ;
Console.WriteLine ;
// Повторить перечисление списка.
etr .Reset ;
while(etr.MoveNext)
Console.Write(etr.Current + " ") ;
Console.WriteLine ;
}
}
Вот к какому результату приводит выполнение этой программы.
0123456789
0123456789
Вообще говоря, для циклического обращения к элементам коллекции циклforeachоказывается более удобным, чем перечислитель. Тем не менее перечислитель предоставляет больше возможностей для управления, поскольку его можно при желании всегда установить в исходное положение.
Применение перечислителя типа IDictionaryEnumerator
Если дляорганизации коллекции в виде словаря, например типаHashtable,реализуется необобщенный интерфейсIDictionary,то для циклического обращения к элементам такой коллекции следует использовать перечислитель типаIDictionaryEnumeratorвместо перечислителя типаIEnumerator.ИнтерфейсIDictionaryEnumeratorнаследует от интерфейсаIEnumeratorи имеет три дополнительных свойства. Первым из них является следующее свойство.
DictionaryEntry Entry { get; }
СвойствоEntryпозволяет получить пару "ключ-значение7' из перечислителя в форме структурыDictionaryEntry.Напомним, что в структуреDictionaryEntryопределяются два свойства,KeyиValue,с помощью которых можно получать доступ к ключу или значению, связанному с элементом коллекции. Ниже приведены два других свойства, определяемых в интерфейсеIDictionaryEnumerator.
object Key { get; } object Value { get; }
С помощью этих свойств осуществляется непосредственный доступ к ключу или значению.