使用Enumerable.OfType <T>()或LINQ查找特定类型的所有子控件

aba*_*hev 14 .net c# linq asp.net findcontrol

存在MyControl1.Controls.OfType<RadioButton>()只搜索通最初收集和不进入到孩子.

是否可以使用Enumerable.OfType<T>()LINQ不使用自己的递归方法找到特定类型的所有子控件?像这样.

dh.*_*dh. 40

我使用扩展方法来展平控件层次结构,然后应用过滤器,以便使用自己的递归方法.

该方法看起来像这样

public static IEnumerable<Control> FlattenChildren(this Control control)
{
  var children = control.Controls.Cast<Control>();
  return children.SelectMany(c => FlattenChildren(c)).Concat(children);
}
Run Code Online (Sandbox Code Playgroud)

  • 简单,优雅,做到了.+1.您还可以将所需的子类型指定为通用参数,并使用OfType()而不是Cast来一次生成列表(避免必须再次通过所有控件来过滤它们). (2认同)