如何在C#中动态创建一个类?
我有一个看起来像这样的课:
public class Field
{
public string FieldName;
public string FieldType;
}
并且对象List<Field>
具有值:
{"EmployeeID","int"},
{"EmployeeName","String"},
{"Designation","String"}
我想创建一个如下所示的类:
Class DynamicClass
{
int EmployeeID,
String EmployeeName,
String Designation
}
有没有办法做到这一点?
我希望在运行时生成它。我不希望物理CS文件驻留在我的文件系统中。
没有找到相关结果
已邀请:
12 个回复
臀博
名称空间。如果你没有经验,这不是直截了当的,但它肯定是可能的。 编辑:这段代码可能有缺陷,但它会给你一般的想法,并希望有一个良好的目标开始。
版萍层分
(CompileAssemblyFromSource)运行它 找到生成的类型 并创建该类型的实例(
) 这样您就可以处理已知的C#代码,而不必发出MSIL。 但是如果你的类实现了一些接口(或者是从某个基类派生的),这种方法效果最好,否则调用代码(读取:编译器)如何知道将在运行时生成的类?
垫歌蝎降凤
我将所有类字段存储在字典
及其类型和值中。这两种方法都可以获取或设置某些属性的值。您必须使用
关键字来创建此类的实例。 与您的示例一起使用:
编辑:以下是我的班级
的样子:
死簇
版萍层分
丧泉缝锋
朗排谎纷瘟
更多见 https://www.oreilly.com/learning/building-c-objects-dynamically
膛嵌墒缅欠
或者您可能希望使用JSON转换器将序列化的字符串对象构造为可管理的对象。 然后使用System.Linq.Dynamic;
其余的只是使用System.Reflection。
杰黔轿缺
绊伦欧
在“compileresulttype”子中,我改变了:
辰炔诚薯
镀建啼
- 彼得塞斯托夫特 为真正对此类编程感兴趣的人工作。 我的提示是,如果你声明某些东西试图避免字符串,那么如果你有类字段,最好使用类System.Type来存储字段类型而不是字符串。 并且为了获得最佳解决方案而不是创建新类,尝试使用已创建的FiledInfo而不是创建new。