IEnumerable<T>
WebForms ページでコントロールを見つけるために使用しているメソッドがあります。
yield return
メソッドは再帰的であり、再帰呼び出しの値を返すときに必要な型を返すのに問題があります。
私のコードは次のようになります。
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>();
}
}
}
これは現在、「式の型を変換できません」というエラーをスローします。ただし、このメソッドが type を返す場合IEnumerable<Object>
、コードはビルドされますが、出力で間違った型が返されます。
yield return
再帰を使用しながら使用する方法はありますか?