IEnumerator<T>
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
-
MoveNext çağrısını tamamla
while (e.____())Cevabı göster
while (e.MoveNext()) -
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.
-
Üyeyi rolüne eşle
- MoveNext
- İlerleyip ilerlemedi
- Current
- Şimdiki değer
- Reset
- Başa dön
- Dispose
- Kaynak bırak