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 return
zwraca 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 return
jednoczesnej 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 return
w funkcjach rekurencyjnych uniknąć skalowania użycia pamięci. Zobacz stackoverflow.com/a/30300257/284795