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