结构体数组的大小(以字节为单位)

7

我有一个结构体数组,需要获取它的字节大小。

在C++中,可以使用sizeof()函数来实现。

但是我需要在C#中实现。

谢谢。

3个回答

11

Marshal.SizeOf(typeof(MyStruct)) * array.Length


我没明白。假设我有public fixed Byte smthng[12];。如果我写int a = smthng.Lenght;,它会触发编译器错误。sizeof()也不起作用。那么我做错了什么? - Hi-Angel
啊,好的。那我怎么获取它的大小? - Hi-Angel
1
@Hi-Angel:你需要使用反射。System.Runtime.InteropServices.Marshal.SizeOf(typeof(YourType).GetField("smthng").FieldType) - user541686
@Mehrdad 哇,这是一个巨大的结构...!也许最好在某个地方声明一个常量变量来保存大小:D - Hi-Angel
@Mehrdad 这怎么可能呢? - Hi-Angel
显示剩余4条评论

5

有一个sizeof运算符,但它只能在不安全的上下文中使用。

还有一种与其他答案提出的方法不同的方法,即:

对于所有其他类型,包括结构体,sizeof运算符只能在不安全的代码块中使用。虽然可以使用Marshal.SizeOf方法,但该方法返回的值并不总是与sizeof返回的值相同。 Marshal.SizeOf返回类型进行封送后的大小,而sizeof返回由公共语言运行时分配的大小,包括任何填充。

来源

示例:

unsafe
{
  int size = sizeof(MyStruct)*myArray.Length;
}

0

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