У мене є 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