C# 作为参数的泛型类型
我的第一个问题是,是否可以指定泛型类型作为参数, 第二,我下面列出的伪代码可能吗 我假设它将使用.NET4.0和dynamics修改器,但我对4.0之前的解决方案更感兴趣C# 作为参数的泛型类型,c#,asp.net,list,generics,C#,Asp.net,List,Generics,我的第一个问题是,是否可以指定泛型类型作为参数, 第二,我下面列出的伪代码可能吗 我假设它将使用.NET4.0和dynamics修改器,但我对4.0之前的解决方案更感兴趣 public static void SomeMethod(List<T> l, Type type, Control samplecontrol) { l.Add((type)samplecontrol); } 编辑: 这是我的解决方案 public static vo
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);
}
}
你是说这个
public static void SomeMethod<T>(List<T> l, T item)
{
l.Add(item);
}
试试这个
public static void YourMethodName<T>(List<T> l, Control samplecontrol)
{
l.Add((T)samplecontrol);
}
是的,这是可能的,而且从C2.0开始就有了。这可能就是您要查找的语法:
public static void AddControlToList<T>(List<T> list, Control sampleControl)
{
list.Add((T)sampleControl)
}
您需要将已修改的泛型类型添加到方法名称中。这将替换您试图传入的类型参数
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);
}
看看这个比较:ctrl.GetType==typeofT-你确定这是你真正想要的吗?如果您将ButtonBase等传递为T,则它将与ButtonBase派生的按钮或复选框不匹配。也许你希望ctrl是T?此外,如果您编写foreach控件ctrl,则不需要强制转换AddTctrl和所有控件ctrl。。。而不是foreach var ctrol…-后者的问题是控件集合不是泛型的,所以var被推断为对象。