C# Ienumerator Hakkında
-
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ıfKisi 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
-
Movelast yaparken sınıf içindeki current ı değiştiriyor musun
-
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...
