Ich habe eine IEnumerable<T>Methode, mit der ich Steuerelemente auf einer WebForms-Seite finde.
Die Methode ist rekursiv und ich habe einige Probleme, den gewünschten Typ zurückzugeben, wenn yield returnder Wert des rekursiven Aufrufs zurückgegeben wird.
Mein Code sieht wie folgt aus:
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>();
}
}
}
Dies löst derzeit den Fehler "Ausdruckstyp kann nicht konvertiert werden" aus. Wenn diese Methode IEnumerable<Object>jedoch den Typ zurückgibt , wird der Code erstellt, aber der falsche Typ wird in der Ausgabe zurückgegeben.
Gibt es eine Möglichkeit yield return, Rekursion zu verwenden?
if(c.Controls.Count > 0)-> if(c.Controls.Any()), besonders wenn Sie auch nachgeben :)
yield. Bitte siehe unten :) Und es ist auch ein
yield returnbei rekursiven Funktionen zu vermeiden , dass die Speichernutzung explosionsartig skaliert. Siehe stackoverflow.com/a/30300257/284795