Mam IEnumerable<T>metodę, której używam do znajdowania formantów na stronie WebForms.
Ta metoda jest rekurencyjna i mam pewne problemy ze zwróceniem żądanego typu, gdy yield returnzwraca wartość wywołania rekurencyjnego.
Mój kod wygląda następująco:
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>();
}
}
}
To powoduje obecnie błąd „Nie można przekonwertować typu wyrażenia”. Jeśli jednak ta metoda zwraca typ IEnumerable<Object>, kod jest budowany, ale w wyniku zwracany jest niewłaściwy typ.
Czy istnieje sposób korzystania z yield returnjednoczesnej rekurencji?
if(c.Controls.Count > 0)-> if(c.Controls.Any()), szczególnie jeśli również
yield. Zobacz poniżej :) I to też jest jedna linijka :)
yield returnw funkcjach rekurencyjnych uniknąć skalowania użycia pamięci. Zobacz stackoverflow.com/a/30300257/284795