【发布时间】:2010-11-12 16:58:32
【问题描述】:
我在 WebForm 中遇到一种情况,我需要通过控件树递归查找所有实现给定接口的控件。
我该怎么做?
我试过写这样的扩展方法
public static class ControlExtensions
{
public static List<T> FindControlsByInterface<T>(this Control control)
{
List<T> retval = new List<T>();
if (control.GetType() == typeof(T))
retval.Add((T)control);
foreach (Control c in control.Controls)
{
retval.AddRange(c.FindControlsByInterface<T>());
}
return retval;
}
}
但它不喜欢第 7 行对T 的强制转换。
我也想过尝试 as 运算符,但这不适用于接口。
我看到了Scott Hanselmans disucssion,但无法从中收集到任何有用的信息。
任何人都可以给我任何指示。谢谢。
格雷格
【问题讨论】:
-
那个演员阵容给你带来了什么错误?你需要演员表吗?
-
as 运算符确实适用于接口。
-
我假设您已经尝试过完全不强制转换控件和/或将返回值更改为控件列表,对吧?
标签: c# reflection interface recursion