2011-09-02 71 views
13

我想使用Type.GetType並傳遞「caLibClient.entity.Web2ImageEntity」完整的類名稱。 caLibClient.entity是名稱空間,位於分離的程序集(caLibClient)中並添加到程序引用程序集列表中。當我從程序調用它時,Type.GetType總是返回Null,這是什麼錯誤?Type.GetType返回null

回答

24

您需要添加該組件名稱爲好,因爲你的類型是不是在執行組件(也mscorlib程序)。所以調用應該是:

var myType = Type.GetType("caLibClient.entity.Web2ImageEntity, FullAssemblyName"); 

Type.GetType() docs

的typeName
類型System.String
要獲取的類型的程序集限定名稱。請參閱 AssemblyQualifiedName。如果類型位於當前正在執行的 程序集或Mscorlib.dll中,則只需提供名稱空間限定的類型名稱 就足夠了。

docs for AssemblyQualifiedName,這是一個簡單的名字:

TopNamespace.SubNameSpace.ContainingClass+NestedClass, MyAssembly, Version=1.3.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089 

更新:如果您已經引用在項目中裝配,並且知道在編譯時什麼類型名字是,你最好說

Type myType = typeof(caLibClient.entity.Web2ImageEntity); 

因爲現在你不需要在運行時搜索類型;編譯器會爲你做所有事情。

+0

如何找到完整的程序集名稱?不知道我是否正確理解這是什麼意思。去哪裏看? – Tomas

+0

@Tomas您引用的程序集的名稱是什麼? – dlev

1

你需要傳遞一個assembly qualified name,你的情況是這樣的:

var yourType = Type.GetType("caLibClient.entity.Web2ImageEntity,caLibClient"); 
+0

我仍然收到空 – Tomas

1

如果你知道在裝配一種類型的目標類型住在你們可以避免對完整裝配限定名稱進行硬編碼。例如:

Type.GetType(
    "MyAssembly.Foo.BarSubclass, " + typeof(MyAssembly.Foo.IBar).Assembly.FullName)