我有一个像这样的c#类
public class Info
{
public string PropertyName;
public int PropertyLength;
}
当我读取文件并将数据提取回类时,它看起来像
List<Info> information=new List<Info>();
//从文件中读取数据并将其添加回列表
的代码information - is a List collecting multiple entries...
0,1 - elements inside the list..
[0]
PropertyName - FirstName
PropertyLength - 25
[1]
PropertyName - LastName
PropertyLength - 50
我想根据上面的结果在运行时生成一个类
public class GeneratedClass
{
[FieldLength(25)];
public string FirstName;
[FieldLength(50)];
public string LastName;
}
我如何用例如 - 例如FieldLength(这个的值来自另一个来源)来装饰它以获得所需的结果?
答案 0 :(得分:4)
Reflection.Emit
包含许多帮助您实现此目标的工具:
Reflection emit提供以下功能:
...
在运行时定义模块中的类型,创建这些类型的实例,并调用它们的方法。
另外(尽管从未使用过),我的理解是you can also use a TypeDescriptor
to achieve this:
TypeDescriptor是一种可扩展的检查机制,不仅适用于组件,而且适用于所有类型和任何给定类型的单个实例... TypeDescriptor允许您检查和修改目标中的任何元数据(添加,更改和删除)可以想象的方式。对于本文的其余部分,术语target将引用所有.NET Framework类型集(包括从COM导入的类型)的元素以及每个.NET Framework类型的所有实例。