我想獲得一個對象使用反射,然後啓動該對象的方法。我從Type.GetType("my.namespace.item")
變得空,所以我決定嘗試一個應該工作的測試。使用此代碼Type.GetType((new my.namespace.item()).GetType().FullName)
我仍然收到null。似乎無法使用GetType與Activator.CreateInstance
這不應該發生在我所瞭解的事情上。我究竟做錯了什麼?
我想獲得一個對象使用反射,然後啓動該對象的方法。我從Type.GetType("my.namespace.item")
變得空,所以我決定嘗試一個應該工作的測試。使用此代碼Type.GetType((new my.namespace.item()).GetType().FullName)
我仍然收到null。似乎無法使用GetType與Activator.CreateInstance
這不應該發生在我所瞭解的事情上。我究竟做錯了什麼?
您只指定Type
的FullName
,這是(具有諷刺意味的)不是您需要的全名。 Type.GetType(string)
需要Type
的AssemblyQualifiedName
爲了工作:
Type.GetType((new my.namespace.item()).GetType().AssemblyQualifiedName)
應該罰款。它指定手動會是什麼樣子:
Type.GetType("Namespace.TypeName, MyAssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089");
很明顯,你可以省略版本,區域性或公鑰如果他們不適用。
如果我沒有類型,我怎樣才能得到AssemblyQualifiedName? Type存儲在數據庫中,因此我不會知道我特別需要'new my.namespace.item()'。另外,我不能保存版本,Culure和PublicKeyToken,因爲它們可能會發生變化。 – 2012-02-22 20:22:43
使用Assembly.GetTypes()並匹配到數據庫以外的名稱。如果有多個程序集,則也會將程序集名稱添加到數據庫中。或者創建一個自定義屬性並修飾你想要顯示的類型。其中customer屬性的屬性是db中使用的名稱。 – 2012-02-22 20:40:19
我剛剛將我的數據庫字段從「my.namespace.thing」更改爲「my.namespace.thing,my.namespace」。這工作。 – 2012-02-22 21:20:59
你可以顯示你正在使用的函數,並指出你得到異常的行(NullReferenceException?),如果有的話? – Jay 2012-02-22 20:14:00
@Jay:我特別在Type.GetType()上得到一個NullReferenceException,這就是爲什麼這是我包含的唯一代碼。 – 2012-02-22 20:20:46