CodeBlanks Logo Icon CodeBlanks

Özet - İleri koleksiyonlar

C# kursu · Orta seviye · Ders 87/116

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

  1. 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.

  2. yield deyimini tamamla

    yield____4;
    Cevabı göster
    yieldreturn4;

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