C#将动态字符串转换为现有的Class

mat*_*con 11 c# string class dynamic

在Windows应用程序中,使用C#,我有一个报告模块,它将依赖于类来填充报告.但是会有很多报告,我不想为每个报告编写代码.

流程将如下:在报告编辑器中,报告将被分配一个类(即"应用程序")作为字符串.当用户选择要运行的报告时,代码将从SQL查询中获取数据.代码将获取数据并找出将数据放入哪个类.然后,报告将获取该类,并使用该类中的数据填充报告.

这是我的困境,我如何使代码动态化,以便代码将指定的类转换为适当的类对象?

记住的例子:

gVar = Report;
(gVar.ReportClass)oClass = new gVar.ReportClass;
Run Code Online (Sandbox Code Playgroud)

jas*_*son 9

使用Type.GetType(特别Type.GetType(string)是带string参数的重载之一(例如))加载Type适当类的实例,然后使用Activator.CreateInstanceType.GetConstructor在该实例上Type实例化实例.

所以,像

Type type = Type.GetType(assemblyQualifiedName);
object instance = Activator.CreateInstance(type);
Run Code Online (Sandbox Code Playgroud)

请注意,除非类型位于mscorlib或当前正在执行的程序集中,否则必须传递程序集限定名.

另外,Activator.CreateInstance假设存在默认构造函数.如果没有默认构造函数,或者您需要将一些参数传递给构造函数,则必须使用重载Activator.CreateInstance指定构造函数参数,或者Type.GetConstructor加载适当的构造函数.