我一直在处理一些我也需要添加模块的代码,我以为我已正确设置了所有内容,但最后一点让我感到困惑。

似乎相对简单,我将类型传递给泛型方法

var name typeof(T).AssemblyQualifiedName;


这样我就可以做到这一点

var type = Type.GetType(name);


但是它在最后一行抛出异常,namenull

我一直在阅读有关类型反射的信息,我知道GetType需要完全限定的程序集名称,但我不明白为什么它会返回为null。

这是否意味着我在代码中做了一些根本性的错误,因为我假设AssemblyQualifiedName是从某个类型发出的,因为它知道它是如何被引用的?

最佳答案

AssemblyQualifiedName可以返回null:


  Type的程序集限定名称,其中包括从中加载Type的程序集的名称;如果当前实例表示通用类型参数,则为null。


如果您真的只是在使用typeof(T),它似乎实际上不应该代表通用类型参数-除非通用方法是通过某种怪异的方式通过反射调用的。

为什么您要尝试使用Type.GetType?听起来您需要的就是

var type = typeof(T);


...那不正是您想要的吗?为什么要输入类型名称?

09-25 17:44
查看更多