我有一个包含一些业务对象的通用业务对象集合类:
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);
}
答案 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)
。