J'ai une IEnumerable<T>
méthode que j'utilise pour trouver des contrôles dans une page WebForms.
La méthode est récursive et j'ai des problèmes pour retourner le type que je veux quand le yield return
retourne la valeur de l'appel récursif.
Mon code ressemble à ceci:
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>();
}
}
}
Cela génère actuellement une erreur «Impossible de convertir le type d'expression». Si toutefois cette méthode retourne le type IEnumerable<Object>
, le code se construit, mais le mauvais type est renvoyé dans la sortie.
Existe-t-il un moyen d'utiliser yield return
tout en utilisant la récursivité?
if(c.Controls.Count > 0)
-> if(c.Controls.Any())
, surtout si vous
yield
. Veuillez voir ci-dessous :) Et c'est aussi un
yield return
dans les fonctions récursives, l'utilisation de la mémoire évolue de manière explosive. Voir stackoverflow.com/a/30300257/284795