Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1391-1497.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
126.26 Кб
Скачать

Void Reset()

Після виклику методу Reset () перерахування знову починається із самого початку колекції. Тому, перш ніж одержати перший елемент колекції, варто викликати метод MoveNext() .

В інтерфейсі IEnumerator<T> методи MoveNext () і Reset () діють тому ж самому принципу.

Необхідно також звернути увагу на два наступні моменти. По-перше, перечисельник не можна використати для зміни вмісту перерахоли з його допомогою колекції. Отже, перечисельники діють стосовно колекції як до доступного тільки для читання. І по-друге, будь-яка зміна в перераховує коллекции, що, робить перечисельник недійсним.

Применение звичайного перечисельника

Перш ніж одержати доступ до колекції за допомогою перечисельника, необхідно одержати його. У кожному класі колекції для цієї мети надається метод GetEnumerator(), що повертає перечисельник у початок колекції. Використовуючи цей перечисельник, можна одержати доступ до будь-якого елемента колекції по черзі. У цілому, для циклічного звертання до вмісту колекції за допомогою перечисельника рекомендується дотримуватися наведеної нижче процедури.

Одержати перечисельник, установлюваний у початок колекції, викликавши для цієї колекції метод GetEnumerator().

Організувати цикл, у якому викликається метод MoveNext (). Повторювати цикл доти, поки метод MoveNext () повертає логічне значення true.

Одержати в циклі кожен елемент колекції за допомогою властивості 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);

// Використати перечисельник для доступу до списку.

IEnumeratoretr = list.GetEnumerator(); while(etr.MoveNext ())

Console.Write(etr.Current + " ");

Console.WriteLine();

// Повторити перерахування списку.

etr.Reset();

while(etr.MoveNext())

Console.Write(etr.Current + " ");

Console.WriteLine();

Загалом кажучи, для циклічного звертання до елементів колекції цикл f про reach виявляється більше зручним, чим перечисельник. Проте перечисельник надає більше можливостей для керування, оскільки його можна при бажанні завжди встановити у вихідне положення.

Застосування перечисельника типу IDictionaryEnumerator

Якщо для організації колекції у вигляді словника, наприклад типу Hashtable, реалізується неузагальнений інтерфейс IDictionary, то для циклічного звертання до елементів такої колекції варто використати перечисельник типу IDictionaryEnumerator замість перечисельника типу IEnumerator. Інтерфейс IDictionaryEnumerator успадковує від інтерфейсу IEnumerator і має три додаткових властивості. Першим з них є наступна властивість.

DictionaryEntry Entry { get; }

Властивість Entry дозволяє одержати пару "джерело-значення" з перечисельника у формі структури DictionaryEntry. Нагадаємо, що в структурі DictionaryEntry визначаються дві властивості, Key i Value, за допомогою яких можна одержувати доступ до ключа або значення, пов'язаному з елементом колекції. Нижче наведені дві інших властивості, обумовлених в інтерфейсі IDictionaryEnumerator.

object Key { get; } object Value { get; }

За допомогою цих властивостей здійснюється безпосередній доступ до ключа або значення.

Перечисельник типу IDictionaryEnumerator використається аналогічно звичайному перечисельнику, за винятком того, що поточне значення в цьому випадку виходить за допомогою властивостей Entry, Key або Value, а не властивості Current. Отже, приобретя перечисельник типу IDictionaryEnumerator, необхідно викликати метод MoveNext(), щоб одержати перший елемент колекції. А для одержання інших її елементів варто продовжити виклики методу MoveNext (). Цей метод повертає логічне значення false, коли в колекції більше немає жодного елемента.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]