我有一种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>();
}
}
}
当前,这将引发“无法转换表达式类型”错误。但是IEnumerable<Object>
,如果此方法返回type ,则代码会生成,但是在输出中返回错误的类型。
有没有yield return
同时使用递归的使用方法?
if(c.Controls.Count > 0)
-> if(c.Controls.Any())
,特别是如果您
yield
。请看下面:)而且也是
yield return
在递归函数中使用,否则内存使用量会急剧增加。参见stackoverflow.com/a/30300257/284795