我正在研究一种通用方法,该方法将对从CollectionBase派生的自定义集合进行操作.泛型方法将比我的示例代码中显示的更多,但这代表了我的问题的本质.
当我尝试以下操作时,我得到编译器错误"类型参数名称此时无效",并在CreateInstance()调用中指示参数T:
public CollectionBase GetInstance<T>() where T : CollectionBase
{
return Activator.CreateInstance(T) as T;
}
Run Code Online (Sandbox Code Playgroud)
相反,我必须使用typeof(T)并将其传递给CreateInstance:
public CollectionBase GetInstance<T>() where T : CollectionBase
{
var targetType = typeof (T);
return Activator.CreateInstance(targetType) as T;
}
Run Code Online (Sandbox Code Playgroud)
没什么大不了的,但还有另一种方法可以声明我的GetInstance方法,这样我可以将T直接传递给Activator.CreateInstance(),就像在第一个examaple中一样吗?在这种情况下,我使用通用类型"T"接受了吗?
我想我的问题的本质是我假设T是一个实际的类型.但编译错误和需要调用typeof(T)似乎表明它是一个类型的名称.
是的,Activator.CreateInstance有一个接受泛型类型参数的重载:
return Activator.CreateInstance<T>();
Run Code Online (Sandbox Code Playgroud)