TypeLoadException: 未能从程序集“ECS.GUI.Define, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型“ECS.GUI.Define.ArmgAimPos”,因为它在 4 偏移地位处蕴含一个对象字段,该字段已由一个非对象字段不正确地对齐或重叠

异样呈现的关键字是:在4偏移地位处蕴含一个对象字段
通过查找对象,该对象为共用体

    // StructLayout使设计者能够管制类或构造的数据字段的物理布局      // Explicit与FieldOffset一起能够管制每个数据成员的准确地位     [StructLayout(LayoutKind.Explicit)]    public struct ArmgAimPos    {        [FieldOffset(0)] public BayType type;        [FieldOffset(4)] public string ContainerID;        [FieldOffset(8)] public string JobID; 

应用FieldOffset属性实现共用体与强制类型转换

应用字段开始的构造中的偏移量初始化 FieldOffsetAttribute 类的新实例。

c# public FieldOffsetAttribute (int offset);

参数

offset Int32

从构造开始处到字段开始处的偏移量(以字节为单位)。

可示意的概念为:原理实际上跟C++一样,将一个int[] 型的变量指向与byte[]型变量雷同的内存区域,跟C++中将dat指向char数组的首地址是一样的。同样,这样的构造体性能与C++的共用体是一样的,即一个构造能够作为多种数据类型,而具体是什么类型视状况而定。

批改异样办法:

如提醒题目所示:4偏移地位,曾经有一个非对象字段了,所以,将偏移量向后挪动即可解决

    // StructLayout使设计者能够管制类或构造的数据字段的物理布局      // Explicit与FieldOffset一起能够管制每个数据成员的准确地位     [StructLayout(LayoutKind.Explicit)]    public struct ArmgAimPos    {        [FieldOffset(0)] public BayType type;        [FieldOffset(8)] public string ContainerID;         [FieldOffset(16)] public string JobID; 

[ FieldOffset(<font color=red> 8</font>)] public string ContainerID;
偏移量批改成了8 ,问题修复