无法在Activator.CreateInstance中直接使用泛型方法类型<T>

ken*_*dev 1 c#

我正在研究一种通用方法,该方法将对从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)似乎表明它是一个类型的名称.

And*_*are 6

是的,Activator.CreateInstance有一个接受泛型类型参数的重载:

return Activator.CreateInstance<T>();
Run Code Online (Sandbox Code Playgroud)