IEnumerable<T>Bir WebForms sayfasında denetimleri bulmak için kullandığım bir yöntem var.
Yöntem özyinelemeli ve yield returnözyinelemeli çağrının değeri returnig olduğunda istediğim türü döndüren bazı sorunlar yaşıyorum .
Kodum 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, şu anda bir "İfade türü dönüştürülemiyor" hatası veriyor. Ancak bu yöntem tür döndürürse IEnumerable<Object>, kod oluşturulur, ancak çıkışta yanlış tür döndürülür.
yield returnÖzyineleme yaparken de kullanmanın bir yolu var mı ?
if(c.Controls.Count > 0)-> if(c.Controls.Any()), özellikle de siz de
yield. Lütfen aşağıya bakın :) Ve bu da tek astarlı :)
yield returnÖzyinelemeli işlevlerden kaçınmaya dikkat etmelisiniz , bellek kullanımı patlayıcı bir şekilde ölçeklenir. Bkz. Stackoverflow.com/a/30300257/284795