2012-05-30 58 views
1

我一直在使用一些代码,我也需要添加一个模块,我想我已经正确设置了所有东西,但最后一点让我难住了。typeof(T).AssemblyQualifiedName returns null

看来还是比较简单的,我传递一个类型泛型方法

var name typeof(T).AssemblyQualifiedName; 

这样我就可以做到这一点

var type = Type.GetType(name); 

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

我一直在阅读周围类型反射我知道GetType期望完全合格的程序集名称,但我不明白它为什么会返回为空。

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

+0

你可以尝试typeof(T).AssemblyFullName,看看你得到什么? – eyossi

回答

8

AssemblyQualifiedName可以返回NULL:

类型,其中包括来自该类型加载的程序集的名称,或空的程序集限定名称,如果当前实例表示泛型类型参数。

它不像它应该,如果你真的只是使用typeof(T)实际上代表一个泛型类型参数 - 除非通用方法正在通过在一些奇怪的方式反射调用。

你为什么试图使用Type.GetType?这听起来像所有你需要的是

var type = typeof(T); 

......这不会做你想要的?为什么要通过类型的名称?

+0

你是对的,在我的特殊情况下'typeof(T)'足够有效。然而,我不能改变它由于其他相关的代码,我发现为什么我的'AssemblyQualifiedName'是'空',因为我的特定项目中缺少Post Build Events。 – Chris