我正在尝试根据给定的输入文件(包含成员名称和类型列表)在 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 连接的内容,我可以选择多个文件之一作为解析源。换句话说,文件可以在运行时更改,但一次只能选择一个文件。
最佳答案
是的,从技术上讲这是可以做到的——但不是以一种非常有用的方式。您必须使用 TypeBuilder 在运行时创建类型(这非常复杂),但下一个问题是很难与仅在运行时已知的类型进行交互。通常这是通过 object
或接口(interface)完成的 - 但这两者都需要对 struct
进行装箱,使得作为 struct
不是很有用> 首先。唯一的解决方法是通过 T
进行泛型(然后可以使用“约束”模型来避免装箱) - 您需要这样的方法:
Foo<T>(T data);
或
Foo<T>(T[] data);
通过 methodInfo.MakeGenericMethod(...).Invoke(...)
切换到的。
关于c# - 在 C# 中动态定义结构体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24119967/