Published on

C# IEnumerable Nedir ? IEnumerator ve IEnumerator ilişkisi ?(C# Temel Arayüzleri 1)

Authors
  • avatar
    Name
    Alperen Önal
    Twitter

IEnumerable, C# ve .NET'de koleksiyonlar üzerinde iterasyon yapmayı sağlayan bir arayüzdür.

IEnumerable, koleksiyonlar üzerinde dolaşabilmek için GetEnumerator metodu ile IEnumerator türünde yineleyici döndürür.

Koleksiyonların, "foreach", "LINQ" gibi dilin özelliklerinden faydalanabilmesi için temel bir arayüzdür.

Kullanımı ve implement edilmesi aslında çok kolaydır.

Arayüzün tanımı alttadır. Görebileceğimiz gibi kullanmak istediğimiz sınıfta tek yapmamız gereken "GetEnumerator" isimli metodu implement etmeliyiz.

 //
 // Summary:
 //     Exposes an enumerator, which supports a simple iteration over a non-generic collection.
 public interface IEnumerable
 {
     //
     // Summary:
     //     Returns an enumerator that iterates through a collection.
     //
     // Returns:
     //     An System.Collections.IEnumerator object that can be used to iterate through
     //     the collection.
     IEnumerator GetEnumerator();
 }

Örneğin : Aşağıdaki gibi bir sınıfım olsun.

public class MyCollection
{
    private readonly string[] _list;
    public MyCollection(params string[] list)
    {
        _list = list;

    }
}


Ben bu sınıfın içerisindeki list yapısında foreach ile dolaşmak istediğim zaman hata alacağım. Çünkü herhangi bir şey implement etmedik. Yani geriye herhangi bir IEnumerator döndürmüyoruz.

Foreach çalışma mantığı kabaca şu şekilde olur : Giriş yapılan koleksiyonu aç, içerisinden GetEnumerator'ü çıkar ve bu nesne üzerinde iterative işlemlere devam et.

Örneğin :

 public static void Main(string[] args)
 {
   MyCollection myCollection = new MyCollection("alperen", "mehmet", "ahmet", "mert", "cemil");
     foreach (var item in myCollection) //Hata alıcağımız kısım
     {
         Console.WriteLine(item);
     }
 }


Aşağıdaki örnekte IEnumerable arayüzünü implement ederek sınıfımızda GetEnumerator methodunu tanımlıyor ve listemizin IEnumerator'ünü döndürüyoruz böylece iterative işlemlere olanak tanıyoruz.

public class MyCollection : IEnumerable
{
    private readonly string[] _list;
    public MyCollection(params string[] list)
    {
        _list = list;
    }

    public IEnumerator GetEnumerator()
    {
        return _list.GetEnumerator();
    }
}



public static void Main(string[] args)
{
    MyCollection myCollection = new MyCollection("alperen", "mehmet", "ahmet", "mert", "cemil");

    foreach (var item in myCollection)
    {
        Console.WriteLine(item);

    }
}


Çıktı :

alperen
mehmet
ahmet
mert
cemil

IEnumerable Faydaları Nelerdir ?

  • Kod Okunabilirliğini arttırır.

  • Delayed Execution(Gecikmeli Yürütme) sağlar. Büyük veri setleriyle çalışırken bellek ve performans optimizasyonu sağlar. Çünkü veriler sadece gerektiği zaman işleme alınır.

  • LINQ ile uyumlu çalışması sağlanır.

C#'daki çoğu koleksiyonlar IEnumerable arayüzünü implement etmişlerdir. Bunun sayesinde bu koleksiyonları kullanırken foreach ile işlemler gerçekleştirebiliyoruz.

Örneğin :


Bu yazımız bu kadardı umarım faydalı olmuştur.

Bu yazı, "C# Temel Arayüzleri" serisinin bir parçasıdır. Yani IEnumerator başta olmak üzere diğer serileri de okumanız bu konuyu anlamanız için faydanıza olacaktır.

IEnumerator Nedir ? IEnumerable ve Foreach ile İlişkisi Nedir ?

kaynakça :

  • javatpoint.com/what-is-ienumerable-in-c-sharp

  • bytehide.com/blog/ienumerable-csharp

  • stackoverflow.com/questions/558304/can-anyone-explain-ienumerable-and-ienumerator-to-me