在运行时实例化C#结构体

4

有人能提供一个在运行时创建结构实例的示例吗?我正在使用的结构体没有定义任何构造函数,只有字段。GetConstructor()方法返回null,到目前为止我还没有找到一种方法来实现这个。

2个回答

6
只需使用 Activator.CreateInstance(Type)
大多数结构体实际上没有无参构造函数 - 使用了不同形式的IL(我记得是initobj指令)。
另一方面,如果一个结构体没有任何构造函数,那就意味着它要么不太有用,要么是可变的 - 可变的结构体可能会引起各种问题。如果您自己控制结构代码,建议给它一个构造函数并使其不可变。可能有些情况下可变的结构体是必要的恶(特别是在交互操作方面),但尽可能避免使用它们。

谢谢。我听说过可变结构体有时会引起混淆,但从未知道这样的问题何时以及为什么会发生。我想现在是找出答案的时候了。 - L.E.O
@L.E.O.:这种情况通常是获取一个值,然后更改该值中的字段,但在您获取它的原始位置上并没有反映出来。基本上会产生各种奇怪的影响。 - Jon Skeet

5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接