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

  • Dive In

    Dive In

    17 Temmuz 2013
  • Flash CS6 Video Tutorials for Beginners (Actionscript 3 Gaming)

    Flash CS6 Vi

    14 EYLÜL 2012
  • Mark Halberstadt

    Mark Halbers

    19 ŞUBAT 2010