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