在C#中获取struct的大小

时间:2011-02-10 11:21:54

标签: c#

  

可能重复:
  How to check the number of bytes consumed by my Structure?

我有一个

的打包形式的结构
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct test
{
  public int a;
  public uint16 b;
}

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

感谢。

2 个答案:

答案 0 :(得分:35)

SizeOf方法可以解决问题。

int size = System.Runtime.InteropServices.Marshal.SizeOf(typeof(Point));

答案 1 :(得分:1)

您将sizeof运算符置于不安全的上下文中,就像编译器建议的那样?

我猜是这样的事情:

int size;
unsafe
{
    size=sizeof(Test);
}

但我不确定你是否真的想这样做。我倾向于使用普通的序列化器而不是具有特定布局的结构。 IMO你应该只为原生互操作使用这样的结构,而不是简单的序列化。

查看SizeOf函数编组的文档也会混淆大小(尽管不是在这个例子中)。