У меня есть 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