我的第一个问题是,是否可以将泛型类型指定为参数, 其次,下面列出的伪代码是可能的吗?
我假设它将使用.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);
}
}
答案 0 :(得分:6)
你是说这个?
public static void SomeMethod<T>(List<T> l, T item)
{
l.Add(item);
}
答案 1 :(得分:4)
您需要将修改后的泛型类型添加到方法名称中。这将替换您尝试传入的类型参数,
public static Add<T>(List<T> l, T samplecontrol)
{
l.Add(samplecontrol);
}
您还可以在方法
上添加类型限定符public static Add<T>(List<T> l, T samplecontrol)
where T : Control
{
l.Add(samplecontrol);
}
答案 2 :(得分:2)
试试这个
public static void YourMethodName<T>(List<T> l, Control samplecontrol)
{
l.Add((T)samplecontrol);
}
答案 3 :(得分:2)
是的,这是可能的,并且自C#2.0以来一直存在。这可能是您正在寻找的语法:
public static void AddControlToList<T>(List<T> list, Control sampleControl)
{
list.Add((T)sampleControl)
}