泛型类型作为参数

时间:2009-11-26 16:35:56

标签: c# asp.net list generics

我的第一个问题是,是否可以将泛型类型指定为参数, 其次,下面列出的伪代码是可能的吗?

我假设它将使用.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);
        }
    }

4 个答案:

答案 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)
}