【发布时间】:2009-11-26 16:35:56
【问题描述】:
我的第一个问题是,是否可以将泛型类型指定为参数, 其次,下面列出的伪代码之类的东西可能吗?
我假设它将使用 .net 4.0 和动态修改器,但我对 4.0 之前的解决方案更感兴趣。
public static void SomeMethod(List<T> l, Type type, Control samplecontrol)
{
l.Add((type)samplecontrol);
}
编辑:
这是我的解决方案...
public static void FindControlRecursive<T>(Control parent, List<T> l)
{
foreach (var ctrl in parent.Controls)
{
if (ctrl.GetType() == typeof(T))
l.Add((T)ctrl);
if (((Control)ctrl).Controls != null && ((Control)ctrl).Controls.Count > 0)
foreach (Control _ctrl in ((Control)ctrl).Controls)
FindControlRecursive<T>(_ctrl, l);
}
}
【问题讨论】:
-
看看这个比较:
ctrl.GetType() == typeof(T)- 你确定这是你真正想要的吗?如果你通过例如ButtonBase与T不匹配,它不会匹配Button或CheckBox(它们都派生自ButtonBase)。也许你想要ctrl is T代替?此外,如果您写的是foreach (Control ctrl ...)而不是foreach (var ctrol ...),则不需要Add((T)ctrl)和所有(Control)ctrl中的演员 - 后者的问题是Controls集合不是通用的,所以@987654335 @ 推断为object.