IEnumerator Kullanımını inceleyelim. IEnumerator bir interface olarak c# içerisine eklenmiştir. Amacı koleksiyonlar içerisindeki elemanlara tek tek salt okunur olarak erişmek ve erişilen o değerin programcı tarafından kullanılabilmesini sağlamaktır. Tabiki bu işlemin koleksiyonun çok fazla elemana sahip olması durumunda belleği en az yoracak şekilde yapılması amaçlanmıştır.

using System.Collections;//Eklemeyi Unutmayınız

namespace SqlOrnek
{
    public partial class Form2 : Form
{
         private void button1_Click(object sender, EventArgs e)
{
            Object[] Dizi = new Object[5] { “Nihat”, 150, “Sinan”, “Ahmet”, 350 };
IEnumerator ElemanBul = Dizi.GetEnumerator();
  while (ElemanBul.MoveNext())
{
                MessageBox.Show(ElemanBul.Current.ToString());
}
}
}
}

Dikkat edin Object olarak tanımlanmış olan koleksiyon değerlerine “MoveNext” methodu kullanılarak kolayca erişebilmeteyiz. Aynı şekilde “Current” özelliği ilede o elemanın değeri elde edilebilmektedir. Şimdi bizde kendi yazacağımız kodla benzer mantığı oluşturmayı deneyelim.

 

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;

namespace WindowsApplication5
{
interface Numaratorum
{
        object this[int index]
{
            get;
set;
  }
string AktifEleman
{
            get;
}
bool SonrakiVarmi
();
}
class Degerlerim:Numaratorum
{
        ArrayList Dizi = new ArrayList();
int IndexNo = -1;
public object this[int index]
{
            get
{
                return Dizi[index];
}
set
{
                Dizi[index] = value;
}
}
public string AktifEleman
{
            get
{
               return Convert.ToString(Dizi[IndexNo]);
}
}
public bool SonrakiVarmi()
{
            IndexNo++;
int Adet = Dizi.Count;
if (IndexNo >= Adet)
{
return false;
}
else
{
                return true;
  }
}
public Numaratorum Numaralandir()
{
            Numaratorum Yeni = this as Numaratorum;
return Yeni;
}
public void Ekle(object Deger)
{
            Dizi.Add(Deger);
        }
}
}

//
private void button7_Click(object sender, EventArgs e)
{
            Degerlerim A = new Degerlerim();
A.Ekle(10);
A.Ekle(“Nihat”);
A.Ekle(35);
//
Numaratorum Yeni = A.Numaralandir();
while (Yeni.SonrakiVarmi())
{
                listBox1.Items.Add(Yeni.AktifEleman);
  }
}

Koda dikkat edin “SonrakiVarmi” aynen “MoveNext” methodu gibi çalışmakta, “AktifEleman” ise “Current” özelliğinin yaptığını yaparak koleksiyondaki o elemana ulaşılabilmektedir.