SORU
13 Ocak 2010, ÇARŞAMBA


Ienumerable ve Özyineleme kullanarak getiri elde

WebForms sayfasındaki denetimleri bulmak için kullanıyorum o IEnumerable<T> bir yöntem var.

Bu yöntem yinelemeli ve bazı sorunları yield return returnig özyinelemeli aramayı değerini istediğim zaman bu tür dönen geçiriyorum.

Benim kod aşağıdaki gibi görünüyor

    public static IEnumerable<Control> 
                               GetDeepControlsByType<T>(this Control control)
    {
        foreach(Control c in control.Controls)
        {
            if (c is T)
            {
                yield return c;
            }

            if(c.Controls.Count > 0)
            {
                yield return c.GetDeepControlsByType<T>();
            }
        }
    }

Bu "ifade tipi" hata. dönüştürmek bir anda atar Ancak bu yöntem döndürür yazarsanız IEnumerable<Object> kod oluşturur, ama yanlış çıktı türü döndürülür.

yield return kullanarak ederken, özyineleme kullanarak bir yolu var mı?

CEVAP
13 Ocak 2010, ÇARŞAMBA


IEnumerable<T>, yield return döndüren bir yöntem içinde T, IEnumerable<T> olmayan bir dönüş var.

Değiştirin

yield return c.GetDeepControlsByType<T>();

ile:

foreach (var x in c.GetDeepControlsByType<T>())
{
  yield return x;
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Awesomesauce Network

    Awesomesauce

    4 EKİM 2012
  • Phymec

    Phymec

    18 Temmuz 2009
  • WK

    WK

    9 Ocak 2006