如何在C#中访问和使用泛型类型参数作为常规类型?

时间:2010-02-24 22:17:01

标签: c# generics type-parameter

我有一个包含一些业务对象的通用业务对象集合类:

public abstract class BusinessObjectCollection<T> : ICollection<T> 
    where T : BusinessObject

我想在我的Collection类上编写一个返回类型T的方法,以及一个返回类型为T的新实例化对象的方法。

在C ++中,这就是你只需声明一个typedef value_type T;并使用BusinessObjectCollection :: value_type,但我找不到C#中的等价物。

有什么建议吗?

编辑:与我想到的typedef平行的一个接近的方法是:

Type GetGenericParameter() { 
    return typeof(T); 
}

2 个答案:

答案 0 :(得分:10)

尝试这样的事情:

public abstract class BusinessObjectCollection<T> : ICollection<T> 
    where T : BusinessObject, new()
{
    // Here is a method that returns an instance
    // of type "T"
    public T GetT()
    {
        // And as long as you have the "new()" constraint above
        // the compiler will allow you to create instances of
        // "T" like this
        return new T();
    }
}

在C#中,您可以像使用代码中的任何其他类型一样使用类型参数(即T) - 您无需额外执行任何操作。

为了能够创建T的实例(不使用反射),必须使用new()约束类型参数,这将保证任何类型参数都包含无参数构造函数。

答案 1 :(得分:1)

关于寻找类型:

如果你需要知道T的类型是什么,you can simply use typeof(T)