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 return
retorno é 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 return
enquanto 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 return
em funções recursivas, o uso da memória aumenta de forma explosiva. Veja stackoverflow.com/a/30300257/284795