CodeBlanks Logo Icon CodeBlanks

IEnumerator<T>

C# kursu · Orta seviye · Ders 83/116

IEnumerator<T> ile yineleyici mekanizmasını öğrenirsin.

IEnumerator<T> arayüzü

IEnumerator<T> yinelemenin alt katmanıdır. Üç üyesi vardır: MoveNext() sonraki elemana geçer ve bool döndürür; Current şu anki elemanı verir; Reset() başa döner.

İlk MoveNext() çağrısından önce Current tanımsızdır. Dizi sonuna gelince MoveNext() false döner. Bu arayüzü doğrudan kullanmak foreach'in perde arkasını görmektir.

foreach nasıl çalışır

foreach (var x in seq) aslında şunu yapar: önce seq.GetEnumerator() çağırır, sonra her adımda MoveNext() çağırıp Current okur. Döngü MoveNext false döndüğünde biter.

İteratör IDisposable uygulayan bir türse foreach sonunda Dispose çağırır. using ile elle açtığında da aynı temizlik yapılır. Bu yüzden IEnumerator kullanımı azdır; foreach çoğu zaman yeter.

Uygulama İteratörü elle kullan

Aşağıdaki list'ten GetEnumerator() ile bir iteratör al. MoveNext() ve Current kullanarak ilk iki elemanı ayrı satırlarda Console.WriteLine ile yazdır.

Örnek çözümü göster
var e = list.GetEnumerator(); ile iteratör al. e.MoveNext(); + Console.WriteLine(e.Current); iki kez çağır.
Örnek çözüm:
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var list = new List<int> { 10, 20, 30 };
        var e = list.GetEnumerator();
        e.MoveNext();
        Console.WriteLine(e.Current);
        e.MoveNext();
        Console.WriteLine(e.Current);
    }
}

Kendini test et

  1. MoveNext çağrısını tamamla

    while (e.____())
    Cevabı göster
    while (e.MoveNext())
  2. MoveNext ne döndürür?

    • Şu anki elemanı
    • Bool: ilerledi mi
    • Toplam eleman sayısını
    • Hata fırlatır
    Cevabı göster

    Bool: ilerledi mi — Doğru. MoveNext bir bool döndürür; true ise ilerledi, false ise dizi bitti.

  3. Üyeyi rolüne eşle

    MoveNext
    İlerleyip ilerlemedi
    Current
    Şimdiki değer
    Reset
    Başa dön
    Dispose
    Kaynak bırak

Orta seviye bölümündeki tüm dersler