Tengo un IEnumerable<T>
método que estoy usando para buscar controles en una página de WebForms.
El método es recursivo y tengo algunos problemas para devolver el tipo que quiero cuando yield return
devuelve el valor de la llamada recursiva.
Mi código se ve de la siguiente manera:
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>();
}
}
}
Esto actualmente arroja un error "No se puede convertir el tipo de expresión". Sin embargo, si este método devuelve el tipo IEnumerable<Object>
, el código se construye, pero el tipo incorrecto se devuelve en la salida.
¿Hay alguna forma de usar yield return
mientras se usa también la recursividad?
if(c.Controls.Count > 0)
-> if(c.Controls.Any())
, especialmente si también estás cediendo :)
yield
. Por favor, vea a continuación :) Y también es una
yield return
en las funciones recursivas, el uso de la memoria aumenta de forma explosiva. Ver stackoverflow.com/a/30300257/284795