CodeBlanks Logo Icon CodeBlanks

yield anahtar kelimesi

C# kursu · Orta seviye · Ders 84/116

yield return ile yineleyici metot yazmayı öğrenirsin.

yield return ile iteratör

Bir metotta yield return yazınca o metot iteratör metoda dönüşür. Her yield return bir değer üretir ve yürütmeyi duraklatır; çağıran bir sonraki değeri isteyince yürütmeye kaldığı yerden devam eder.

Bu, tüm diziyi belleğe yüklemeden eleman üretmenin yoludur. Dönüş türü IEnumerable<T> olur. Derleyici arka planda bir IEnumerator sınıfı üretir; elle yazmana gerek kalmaz.

Tembel değerlendirme

yield return ile yazılan metot tembel (lazy) çalışır. Çağırdığında gövde hemen çalışmaz; dönüş değeri üzerinde foreach başlayınca ilk yield return'a kadar ilerler.

Bu sayede sonsuz diziler bile yazılabilir. while (true) yield return ... döngüsü çağıran durana kadar değer üretir. Ayrıca büyük veri kaynakları parça parça işlenebilir; tüm veriyi beklemek gerekmez.

Uygulama yield ile sayı üret

Bir Numbers() metodu yaz: dönüş türü IEnumerable<int> olsun ve yield return ile 1, 2, 3 üretsin. Main içinde foreach ile her elemanı yazdır.

Örnek çözümü göster
Numbers() metodunu IEnumerable<int> dönecek şekilde yaz, içine yield return 1; yield return 2; yield return 3; koy. Main'de foreach (var n in Numbers()) ile gez.
Örnek çözüm:
using System;
using System.Collections.Generic;

class Program
{
    static IEnumerable<int> Numbers()
    {
        yield return 1;
        yield return 2;
        yield return 3;
    }

    static void Main()
    {
        foreach (var n in Numbers())
        {
            Console.WriteLine(n);
        }
    }
}

Kendini test et

  1. yield biçimini davranışa eşle

    yield return
    Tek değer üret
    yield break
    Yinelemeyi bitir
    return List<T>
    Tüm listeyi ver
    foreach
    İteratörü tüket
  2. yield deyimini tamamla

    yield____1;
    Cevabı göster
    yieldreturn1;
  3. yield return ne yapar?

    • Metodu hemen çalıştırır
    • Tüm diziyi belleğe yükler
    • Değer üretir ve duraklatır
    • Hata fırlatır
    Cevabı göster

    Değer üretir ve duraklatır — Doğru. yield return bir değer üretir ve yürütmeyi duraklatır.

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