C Sharp Yield Kullanımı

  1. newbie
    22
    235
    11.7.2018 14:42:00

    Yield nedir arkadaşlar , ne için kullanılır C sharpta ? yield return item; diye bir kod parçacığında gördüm ,teşekkürler cevaplarınız için...

    c# .net 2 ay önce 715 Görüntüleme

( 1 ) Cevap

  1. Snoopy
    20
    7241
    11.7.2018 17:15:00

    Eğer bir metodda , bir operatörde veya get erişiminin içinde yield kullanıyorsanız , o metodu,operatörü veya get erişimciyi bir iterator(yineleyici) olarak belirtiyorsunuz diyor sayın Microsoft https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/yield

    Şimdi çok kavram karmaşasına girmeden ben bir örnek ile cevaplamayı tercih edicem. Patronun senden öyle bir metot yapmanı istediki , metod her çağrışında farklı ve sıralı bir değer dönecek.Veya öyle bir metot istedi ki ,metot bir veri dizisinin elamanlarını ,her çağrıldığında birini dönecek.

    Şimdi buna uygun bir metot yapalım , adı Sayilar() olsun ;

    class Program
    {
        public static IEnumerable<int> Sayilar()
        {
            yield return 1;
            yield return 2;
            yield return 3;
            yield return 4;
            yield return 5;
            yield return 6;
        }
        static void Main(string[] args)
        {
            foreach (int i in Sayilar())
            {
                Console.WriteLine(i);
            }
    
            Console.ReadLine();
        }
    }
    

    Yukardaki kodu alıp denersen , resimdeki gibi yerlere break point koy lütfen , öyle çalıştır;

    C_sharp_yield_kullanimi_iterayon

    dediğim breakpointleri koyup çalıştırdığın zaman , aşağıdaki iterasyon sırayla sende de çalışacak

    C_sharp_yield_kullanimi_iterayon1


    enter image description here


    enter image description here


    enter image description here


    enter image description here


    enter image description here

    gördüğün üzere , sanki state state dönen bir yapı var , peki her state için , her bir elemanı iterasyoa sokmak için

    yield return 1; 
    yield return 2;
    

    gibi tek tek uğraşacak mıyız , tabiki hayır :) ;

    class Program
    {
        public static IEnumerable<int> Sayilar()
        {
            int i = 0;
            while (i<5)
            {
                i++;
                yield return i;
            }
        }
        static void Main(string[] args)
        {
            foreach (int i in Sayilar())
            {
                Console.WriteLine(i);
            }
    
            Console.ReadLine();
        }
    }
    

Cevabınız