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.
Nihat DEMİRLİ