C#中的struct union问题 [英] Problem of struct union in C#

查看:332
本文介绍了C#中的struct union问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个结构:



I Have this struct:

public struct A
{
    public int first;
}
public struct B
{
    [MarshalAs(UnmanagedType.ByValArray, SizeConst=32)]
    public char[] first;
}
[StructLayout(LayoutKind.Explicit)]
public struct CUnion
{
    [FieldOffset(0)]
    public A _a;

    [FieldOffset(0)]
    public B _b;
}
public struct C
{
    public int type;
    public CUnion u;
}





但是当我实例化新的C struct时,这个错误





but when i instance new C struct, this error

C c = new C();

// Exception
// An unhandled exception of type 'System.TypeLoadException' occurred in Microsoft.VisualStudio.HostingProcess.Utilities.dll
// Additional information: Could not load type 'CUnion' from assembly '...' because it contains an object field at offset 0 that is incorrectly aligned or overlapped by a non-object field.





任何ideia?



PS:固定内存不适用,因为内存不是senquencial

推荐答案

请试试这个







Please Try this



public struct A
   {
       public int first;
   }
   [StructLayout(LayoutKind.Sequential, Pack = 1)]
   public struct B
   {
       [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
       public char[] first;
   }
   [StructLayout(LayoutKind.Explicit)]
   public struct CUnion
   {
       [FieldOffset(4)]
       public A _a;

       [FieldOffset(0)]
       public B _b;
   }
   public struct C
   {
       public int type;
       public CUnion u;
   }


这篇关于C#中的struct union问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆