2012-05-30 57 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