C# Ienumerator Hakkında

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Fdumanli
    Fdumanli's avatar
    Kayıt Tarihi: 13/Mayıs/2009
    Erkek

    Merhaba arkadaşlar

    Öncelikle sorumu anlatayım. Amacım ienumerable arabiriminden yeni bir koleksiyon türetmek.

    Yeni koleksiyon sınıfım için ienumerator de yazdım fakat arabirimden farklı olarak iki metot ekledim,

    Bildiğiniz gibi varsayılan olarak IEnumerator arabiriminde Current, MoveNext(), ve Reset() elemanları var.

    Ben de MoveLast(), ve MovePrevious() yazmaya çalışıyorum kendi çapımda. MoveLast() ta indisi count a eşitliyorum, movepreviousta ise bir azaltıyorum.


    Şimdi sorum şu,

    kisiEnumerator kE = new kisiEnumerator(kisiler); // bu yazdığım kendi enumaretor, yapıcısı kisiler tipinden parametre alıyor
    , kisiler ise ienumerable den türemiş bir sınıf

    Kisi objKisi;
    objKisi = (Kisi)kE.Current;
    kE.MoveLast();
    Console.WriteLine(objKisi.Adsoyad); // cıktı x
    kE.MovePrevious();
    Console.WriteLine(objKisi.Adsoyad); // cıktı yine x


    Bu blogun çıktısı aynı iki isim oluyor, yani movelast'ı çağırdıktan sonra da aynı isim yazıyor, moveprevious u çağırdıktan sonra da(ikisi de listenin ilk elemanı 2.satırda kE.Current diye eşitlemiştim çünkü ilk elemanı.)

    Yani sınıflar referans tipli olmasına rağmen metotları çağırdıktan sonra listede ilerleme yapamıyorum, tekrar current e eşitlemem gerekiyor.

    Umarım derdimi anlatabilmişimdir, teşekkür ederim şimdiden

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    SinusX
    SinusX's avatar
    Kayıt Tarihi: 14/Aralık/2010
    Erkek

    Movelast yaparken sınıf içindeki current ı değiştiriyor musun 


    Si vis pacem para bellum.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Fdumanli
    Fdumanli's avatar
    Kayıt Tarihi: 13/Mayıs/2009
    Erkek
    SinusX bunu yazdı

    Movelast yaparken sınıf içindeki current ı değiştiriyor musun 

     public void MoveLast()
            {
                indis = oKisiler.Count - 1;
                this.Current = oKisiler[indis];
            }


    cevap evet hocam, değiştiriyorum, ama yine de olmamıştı.

    Ama şöyle bir çözüm buldum,
    Console.WriteLine(objKisi.Adsoyad); bunun yerine Console.WriteLine(ke.Current) yazdım, kE.Current kisi tipinde veri döndürüyor, ben de kisi sınıfının toStringini ezdim adsoyadı döndürecek şekilde yazdım...

Toplam Hit: 681 Toplam Mesaj: 3