2013-02-20 123 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");