Özet - İleri koleksiyonlar
IEnumerable, yield ve custom koleksiyonu birleştirerek bir Range sınıfı yazarsın.
Özet - İleri koleksiyonlar
Bu grupta yinelemenin temelini öğrendin. IEnumerable<T> gezilebilirlik sözleşmesidir, IEnumerator<T> alt katmandır, yield return iteratör metodları kısa yoldan yazar.
Kendi koleksiyonunu IEnumerable<T> ile yazabilir; SortedList<K,V> ile dizi tabanlı sıralı erişim sağlayabilirsin. Şimdi iki küçük görevle bunları birleştireceksin.
Uygulama yield ile kare üret
Bir Squares() metodu yaz: dönüş türü IEnumerable<int> olsun ve yield return ile 1, 4, 9 üretsin. Main içinde foreach ile yazdır.
Örnek çözümü göster
Squares() metodunu IEnumerable<int> dönecek şekilde yaz, içine yield return 1; yield return 4; yield return 9; koy. Main'de foreach ile gez.
Örnek çözüm:
using System;
using System.Collections.Generic;
class Program
{
static IEnumerable<int> Squares()
{
yield return 1;
yield return 4;
yield return 9;
}
static void Main()
{
foreach (var s in Squares())
{
Console.WriteLine(s);
}
}
}
Uygulama IEnumerator ile ilk eleman
Aşağıdaki list'ten GetEnumerator() ile iteratör al. MoveNext() çağırıp Current değerini Console.WriteLine ile yazdır.
Örnek çözümü göster
var e = list.GetEnumerator(); ile iteratör al, e.MoveNext(); çağır, Console.WriteLine(e.Current); yaz.
Örnek çözüm:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var list = new List<int> { 7, 8, 9 };
var e = list.GetEnumerator();
e.MoveNext();
Console.WriteLine(e.Current);
}
}
Yinelemenin gücü
Yineleme araçlarını bilmek hem hazır koleksiyonları hem de kendi yazdıklarını esnek yapar. IEnumerable<T> alan bir metot tüm dizileri kabul eder; yield return ile büyük veriyi parça parça üretirsin.
Sonraki bölüm ileri LINQ konularına geçiyor: GroupBy, Join ve Aggregate gibi işleçler yinelemenin üstüne kuruludur.
Kendini test et
-
foreach hangi arayüzü ister?
- IDisposable
- IEnumerable<T>
- IComparable
- IClonable
Cevabı göster
IEnumerable<T> — Doğru. foreach, IEnumerable<T> uygulayan türlerle çalışır.
-
yield deyimini tamamla
yield____4;Cevabı göster
yieldreturn4;