Возвратить по очереди буквы от F до L:
F G Н I J К L
Создание обобщенного итератора
В приведенных выше примерах применялись необобщенные итераторы, но, конечно, ничто не мешает создать обобщенные итераторы. Для этого достаточно возвратить объект обобщенного типаIEnumerator
// Простой пример обобщенного итератора, using System;
using System.Collections.Generic;
class MyClass
T [ ] array;
public MyClass(T[] a) { array = a;
}
// Этот итератор возвращает символы из массива chrs. public IEnumetator
foreach(T obj in array) yield return obj;
}
}
class GenericItrDemo { static void Main {
int [ ] nums ={4, 3, 6,
MyClass
foreach(int x in me)
Console.Write(x + " ");
Console.WriteLine;
bool[] bVals = { true, true, false, true };
MyClass
foreach(bool b in mc2)
Console.Write(b + " ");
Console.WriteLine ;
}
}
Вот к какому результату приводит выполнение этой программы.
4 3 6 4 7 9
True True False True
В данном примере массив, состоящий из возвращаемых по очереди объектов, передается конструктору классаMyClass.Тип этого массива указывает в качестве аргумента типа в конструкторе классаMyClass.
МетодGetEnumerator оперирует данными обобщенного типаТи возвращает перечислитель типаIEnumerator
Инициализаторы коллекций
В С# имеется специальное средство, называемое
List
После выполнения этого оператора значение свойства1st. Countбудет равно 6, поскольку именно таково число инициализаторов. А после выполнения следующего цикла foreach:
foreach(ch in 1st)
Console.Write(ch + " ");
получится такой результат:
С A E В D F
Для инициализации коллекции типаLinkedListcTKey, TValue>,в которой хранятся пары "ключ-значение", инициализаторы приходится предоставлять парами, как показано ниже.
SortedListcint, string> 1st =
new SortedListcint, string> { {1, "один11}, {2, "два" }, {3, "три"} };