2010-09-22 16 views
9

Ben bir VB.Net geliştiricisiyim, C#, türünde yeni bir kullanıcıyım C# belgelerine bakarken Yineleyiciler ve Jeneratörler aracılığıyla geldim, kullanımı tam olarak anlayamadım, Orada açıklayabileceğim herkes var (örneğin, eğer mümkün ise).C# Yineleyicileri ve Jeneratörleri nedir ve bunları nasıl kullanabilirim?

+1

Yineleyiciler, genellikle farklı türlerin listelerini taşımak için kullanılır. Yineleyiciler .net'de Enumerators olarak adlandırılır. Yineleyicilerle ilgili başka bir soru: http://stackoverflow.com/questions/1227283/why-do-we-need-iterators-in-c – jgauffin

cevap

14

Yineleyiciler, IEnumerable<T>/IEnumerator<T> kendiniz uygulamak zorunda kalmadan bir dizi öğe oluşturmanın kolay bir yoludur. Bir yineleyici, bir foreach döngüsünde numaralandırabileceğiniz bir IEnumerable<T> döndüren bir yöntemdir.

İşte basit bir örnek:

public IEnumerable<string> GetNames() 
{ 
    yield return "Joe"; 
    yield return "Jack"; 
    yield return "Jane"; 
} 

foreach(string name in GetNames()) 
{ 
    Console.WriteLine(name); 
} 

Bildirim yield return ifadeleri: Bu deyim aslında yöntemde, sadece "itme" uygulamasını okuyor kim yanındaki eleman dönmek yok.

Derleyici bir yineleyici bloğuyla karşılaştığında, aslında IEnumerable<T> ve IEnumerator<T>'u uygulayan bir sınıftaki bir durum makinesine yeniden yazar. Yineleyicideki her yield return ifade, bu durum makinesindeki bir duruma karşılık gelir.

Yineleyiciler hakkında daha ayrıntılı bilgi için Jon Skeet tarafından this article adresine bakın.

+0

Bunu yapmak için ne zaman gerektiğine dair bir örnek görmek faydalı olabilir. Hedefiniz sadece "Joe" "Jack" ve "Jane" üzerinden numaralandırmaya izin vermekse, basit örnekiniz sadece bir dizi diziyle değiştirilebilir. – MarkJ

+0

Evet, bu örnek pek kullanışlı değil, bunun yerine bir diziyi kolayca kullanabilirsiniz. Daha kullanışlı örnekler için, [Jon Skeet'in Nesneleri Yeniden Linki Yeniden Oluşturma dizisi] bölümüne bakın (http://msmvps.com/blogs/jon_skeet/archive/tags/Edulinq/default.aspx);) –

İlgili konular