我的第一个问题是,是否可以指定泛型类型作为参数,其次,是否可以使用下面列出的伪代码?作为参数的泛型类型
我认为它将使用.net 4.0和动态修改器,但我更喜欢pre 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是T'而不是?另外,如果你编写'foreach(Control ctrl ...)'而不是'foreach(var ctrol ..),你不需要在添加((T)ctrl)'和所有'(Control)ctrl'中进行转换。 。)' - 后者的问题是'Controls'集合不是泛型的,所以'var'被推断为'object'' – 2009-11-26 17:16:58