Bir koleksiyonda bulunan elemanların her birini görüntülemek için foreach döngüsü yerine Numaralandırıcı kullanabiliriz. Her ne kadar foreach döngüsü daha kullanışlı olsa da Numaranlandırıcıyı tercih etmemiz gereken durumlar olabilir.
Koleksiyon sınıflarının her birinde bulunan GetEnumerator() metodu ile bir Numaralandırıcı nesnesi elde edebiliriz. Elde etmiş olduğumuz nesnenin referansını; tercih etmiş olduğumuz koleksiyon sınıfına bağlı olarak IEnumerator veya IDictionaryEnumerator arayüzlerinde tutmaktayız.
IEnumerator Arayüzü
ArrayList, Queue, Stack gibi tekil öğeleri tutan koleksiyon sınıflarında Numaralandırıcı, IEnumerator arayüzünü uygulamaktadır. IEnumerator’da MoveNext() metodu, Reset() metodu ve Current özelliği bulunmaktadır.
- Current Özelliği
O an Numaralandırılmakta olan elemanı döndürmektedir. Salt okunur bir özelliktir. - MoveNext() Metodu
Metot her çağrıldığında numaralandırıcı mevcut konumunu koleksiyon içindeki bir sonraki elemana kaydırır. Bir sonraki eleman mevcut ise True, değilse False döndürür. MoveNext() metodu hiç çağrılmamış ise Current’ın değeri tanımsızdır. - Reset() Metodu
Numaralandırıcıyı başlangıç durumuna döndürür.
ArrayList siteler = new ArrayList(); siteler.Add("www.srdrylmz.com"); siteler.Add("www.sakarya.edu.tr"); // Numaralandırıcı kullanılarak koleksiyon elemanları listelendi. IEnumerator Numaralandirici = siteler.GetEnumerator(); while (Numaralandirici.MoveNext()) Console.WriteLine(Numaralandirici.Current); // foreach döngüsüyle koleksiyon elemanları listelendi. foreach (string site in siteler) Console.WriteLine(site);
IDictionaryEnumerator Arayüzü
Dictionary, HashTable, SortedList gibi Anahtar-Değer çiftlerini saklayan koleksiyon sınıflarında IEnumerator arayüzü yerine IDictionaryEnumerator arayüzünü kullanmaktayız. IDictionaryEnumerator, IEnumerator’dan türetildiği için, IEnumerator arayüzünde bulunan metot ve özelliklerini de içermektedir. Ayriyeten Anahtar-Değerler çiftini tutan Entry özelliğini içermektedir.
- DictionaryEntry Entry Özelliği
O an Numaralandırılmakta olan Anahtar-Değer çiftini tutmaktadır. - Entry.Key Özelliği
O an Numaralandırılmakta olan Anahtar-Değer çiftinin Anahtar(Key) değerini döndürmektedir. - Entry.Value Özelliği
O an Numaralandırılmakta olan Anahtar-Değer çiftinin Değer(Value) değerini döndürmektedir.
Dictionary<int,string> Ogrenci = new Dictionary<int, string>(); Ogrenci.Add(134, "Serdar Yılmaz"); Ogrenci.Add(118, "Kadir Aydemir"); // Numaralandırıcı kullanarak koleksiyon elemanları listelendi. IDictionaryEnumerator Numaralandirici = Ogrenci.GetEnumerator(); while (Numaralandirici.MoveNext()) Console.WriteLine("Öğrenci No:{0} - Öğrenci Adı:{1}", Numaralandirici.Entry.Key, Numaralandirici.Entry.Value); // foreach döngüsüyle koleksiyon elemanları listelendi. foreach (KeyValuePair<int, string> Ogr in Ogrenci) Console.WriteLine("Öğrenci No:{0} - Öğrenci Adı:{1}", Ogr.Key, Ogr.Value);
Serdar Yılmaz