У мене є IEnumerable<T>
метод, який я використовую для пошуку елементів керування на сторінці WebForms.
Метод є рекурсивним, і у мене виникають проблеми із поверненням типу, який я хочу, коли yield return
є зворотним значенням рекурсивного виклику.
Мій код виглядає так:
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>();
}
}
}
Наразі це призводить до помилки "Неможливо перетворити тип виразу". Якщо цей метод повертає тип IEnumerable<Object>
, код будується, але неправильний тип повертається у висновку.
Чи існує спосіб використання, yield return
а також використання рекурсії?
if(c.Controls.Count > 0)
-> if(c.Controls.Any())
, особливо якщо ви також поступаєтесь :)
yield
. Будь ласка, дивіться нижче :) І це
yield return
рекурсивних функцій, коли використання пам'яті масштабує вибухонебезпечно. Дивіться stackoverflow.com/a/30300257/284795