我正在尝试在C#中动态定义结构,基于给定的输入文件以及成员名称和类型的列表。为了解决这个问题,假设文件具有以下布局:
[Struct Name 1]
parameter1, type1, typical_value1
parameter2, type2
parameter3, type1
[Struct Name 2]
... etc
我已经阅读了this post一段时间了,还没有在C#中实现它 - 我的问题是,这可以吗?此外,是否可以在不使用unsafe
?
我最初想要坚持使用结构的原因是因为我将使用它来序列化通过I / O接收的byte[]
,我现在拥有的扩展方法可以完美地用于静态定义的结构;但是我愿意为包装类重写它以使其更容易。
我的想法是,根据用户通过I / O连接的内容,我可以选择几个文件中的一个作为解析源。换句话说,文件可以在运行时更改,但一次只能选择一个文件。
答案 0 :(得分:4)
是的,技术上可以做到 - 但不是非常有用。您必须使用TypeBuilder
在运行时创建类型(这非常复杂),但下一个问题是很难与仅在运行时知道的类型进行对话。通常这是通过object
或接口完成的 - 但这两者都需要装箱struct
,这使得首先成为struct
并不是非常有用。唯一的解决方法是通过T
进行泛型(然后可以使用"约束"模型来避免装箱) - 您需要一个类似的方法:
Foo<T>(T data);
或
Foo<T>(T[] data);
您通过methodInfo.MakeGenericMethod(...).Invoke(...)
切换。