Eu tenho um IEnumerable<T>método que estou usando para encontrar controles em uma página WebForms.
O método é recursivo e estou tendo alguns problemas para retornar o tipo desejado quando o yield returnretorno é o valor da chamada recursiva.
Meu código é o seguinte:
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>();
}
}
}
No momento, isso gera um erro "Não é possível converter o tipo de expressão". Se, no entanto, esse método retornar tipo IEnumerable<Object>, o código será gerado, mas o tipo errado será retornado na saída.
Existe uma maneira de usar yield returnenquanto também usa recursão?
if(c.Controls.Count > 0)-> if(c.Controls.Any()), especialmente se você está rendendo bem :)
yield. Por favor, veja abaixo :) E é um one-liner também :)
yield returnem funções recursivas, o uso da memória aumenta de forma explosiva. Veja stackoverflow.com/a/30300257/284795