在C#中获取struct的大小

Nic*_*ick 22 c#

可能重复:
如何检查我的Structure消耗的字节数?

我有一个包装形式的结构

[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct test
{
  public int a;
  public uint16 b;
}
Run Code Online (Sandbox Code Playgroud)

我如何获得结构的大小,因为编译器声明sizeof只能在不安全的上下文中使用?

谢谢.

Pet*_*old 37

SizeOf方法可以解决问题.

int size = System.Runtime.InteropServices.Marshal.SizeOf(typeof(Point));
Run Code Online (Sandbox Code Playgroud)

  • 更具体地说,它是System.Runtime.InteropServices.Marshal.SizeOf,应用于实例.应该返回与应用于该类型的语言"sizeof"相同的结果.以下示例. (3认同)
  • typeof(Point),Point是一个类.使用struct它给了我Exception !! try int size = System.Runtime.InteropServices.Marshal.SizeOf(typeof(test)); (2认同)

Cod*_*aos 6

您像编译器建议的那样将 sizeof 运算符放入不安全的上下文中?

我猜是这样的:

int size;
unsafe
{
    size=sizeof(Test);
}
Run Code Online (Sandbox Code Playgroud)

但我不确定你是否真的想这样做。为此,我倾向于使用普通的序列化程序而不是具有特定布局的结构。IMO 您应该仅将此类结构用于本机互操作,而不是用于简单的序列化。

并且查看SizeOf函数编组的文档也可能会弄乱大小(尽管在这个例子中不是)。

  • 那仍然会导致编译错误。 (3认同)