IEnumerator c#

Yazdır Geri Düşür Yükselt

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İ

Zirvedeki Beyinler | IEnumerator c#