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

标签 c# string class dynamic

<分区>

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

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

这是我的困境,我如何使代码动态化以便代码将分配的类转换为正确的类对象?

心目中的例子:

gVar = Report;
(gVar.ReportClass)oClass = new gVar.ReportClass;

最佳答案

使用Type.GetType (特别是采用 string 参数的重载之一(例如 Type.GetType(string) ))为适当的类加载 Type 的实例,然后使用 Activator.CreateInstanceType.GetConstructorType 实例上实例化一个实例。

所以,像

Type type = Type.GetType(assemblyQualifiedName);
object instance = Activator.CreateInstance(type);

请注意,您必须通过 assembly qualified name除非类型在 mscorlib 或当前正在执行的程序集中。

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

关于C# 将动态字符串转换为现有类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4876683/

相关文章:

c# - 不允许新事务,因为 session 中还有其他线程在运行 LINQ To Entity

javascript - 添加到序列化数组中的复杂对象在服务器端始终为空

JavaScript 正则表达式(替换)如果在其他单词之后没有单词

c++ - 有没有办法对从字符串 cpp 转换而来的整数执行算术

java - MyInternalFrame 无法解析为类型

c++ - 将char数组存储在一个类中然后返回它

c# - 无需 SAS token 即可访问存储在 Azure 文件存储中的文件

c# - 如何使用 C#/.NET 将日期时间转换为时间戳(忽略当前时区)

c# - 尝试将对象添加到类中的列表时出现 "Object reference not set to an instance of an object"错误

c# - 使用正则表达式将部分字符串转换为 double