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 returndevuelve 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 returnmientras 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 returnen las funciones recursivas, el uso de la memoria aumenta de forma explosiva. Ver stackoverflow.com/a/30300257/284795