【问题标题】:Define struct dynamically in C#在 C# 中动态定义结构
【发布时间】:2014-06-09 20:26:29
【问题描述】:

我正在尝试根据具有成员名称和类型列表的给定输入文件在 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 连接的内容,我可以选择几个文件之一作为解析源。换句话说,文件可以在运行时更改,但一次只能选择一个文件。

【问题讨论】:

  • 因为链接的帖子是用 C 语言编写的,而我正在尝试在 C# 中复制该代码
  • 运行时输入文件是否发生变化?
  • @qxg 不,不是;在这种情况下你会推荐使用 CodeDOM 吗?

标签: c# .net dynamic struct


【解决方案1】:

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

Foo<T>(T data);

Foo<T>(T[] data);

你通过methodInfo.MakeGenericMethod(...).Invoke(...)切换到。

【讨论】:

  • 谢谢——我会考虑使用TypeBuilder,看起来它可以满足我的需要。
猜你喜欢
  • 2021-01-31
  • 2011-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-20
  • 2018-04-09
  • 1970-01-01
相关资源
最近更新 更多