在C#中动态定义struct

时间:2014-06-09 12:06:42

标签: c# .net dynamic struct

我正在尝试在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连接的内容,我可以选择几个文件中的一个作为解析源。换句话说,文件可以在运行时更改,但一次只能选择一个文件。

1 个答案:

答案 0 :(得分:4)

是的,技术上可以做到 - 但不是非常有用。您必须使用TypeBuilder在运行时创建类型(这非常复杂),但下一个问题是很难与仅在运行时知道的类型进行对话。通常这是通过object或接口完成的 - 但这两者都需要装箱struct,这使得首先成为struct并不是非常有用。唯一的解决方法是通过T进行泛型(然后可以使用"约束"模型来避免装箱) - 您需要一个类似的方法:

Foo<T>(T data);

Foo<T>(T[] data);

您通过methodInfo.MakeGenericMethod(...).Invoke(...)切换。