2013-02-20 122 views
1

如果我有班級名稱作爲字符串,我可以得到類屬性?我的實體在類庫項目中,我嘗試了不同的方法來獲取類型並獲得程序集,但我無法獲取類實例。通過類名獲取類屬性作爲字符串在C#

var obj = (object)"User"; 
var type = obj.GetType(); 
System.Activator.CreateInstance(type); 

object oform; 
var clsName = System.Reflection.Assembly.GetExecutingAssembly().CreateInstance("[namespace].[formname]"); 

Type type = Type.GetType("BOEntities.User"); 
Object user = Activator.CreateInstance(type); 

沒有什麼工作

+0

只是可以肯定的是,'User'類型是不是在你已經引用的程序集?因爲那麼你應該簡單地使用'var type = typeof(User);'作爲你的第一步。 – 2013-02-20 11:38:58

回答

3

我懷疑你正在尋找:

Type type = Type.GetType("User"); 
Object user = Activator.CreateInstance(type); 

注:

  • 這隻會看在mscorlib和當前執行的程序集,除非你也指定名稱中的程序集
  • 它需要是一個命名空間限定的名稱,例如MyProject.User

編輯:爲了在一個不同組件訪問類型,既可以使用一個組件限定的類型名稱,或者僅使用Assembly.GetType,例如

Assembly libraryAssembly = typeof(SomeKnownTypeInLibrary).Assembly; 
Type type = libraryAssembly.GetType("LibraryNamespace.User"); 
Object user = Activator.CreateInstance(type); 

(請注意,我還沒有得到解決性能沒有在你的問題其他人談過這個問題,但Type.GetProperties應該可以正常工作。)

+0

這不工作我我已經提到我的課程是在不同的項目中,我如何獲得該程序集的參考? – 2013-02-20 11:27:38

+1

@ImranRashid:你提到它在一個類庫項目中,但是你沒有說這個代碼運行在哪裏。這就是爲什麼重要的是要清楚。將編輯。 – 2013-02-20 11:31:08

+0

Type.GetType(「BOEntities.User」)返回null。我在單元測試項目中運行它 – 2013-02-20 11:34:00

1

我可以得到類的屬性,如果我有類名字符串?

當然:

var type = obj.GetType(); 
PropertyInfo[] properties = type.GetProperties(); 

這將讓公共實例屬性的列表。如果您需要訪問私人或靜態屬性可能需要指出:

var type = obj.GetType(); 
PropertyInfo[] properties = type.GetProperties(BindingFlags.NonPublic); 
0

嘗試

Type type = Type.GetType("Assembly with namespace");