检索结构的[StructLayout]属性

时间:2013-07-16 18:50:35

标签: c# struct sizeof

我想从应用于以下结构的StructLayout中获取22字节的结构大小。

[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Ansi, Pack = 1, Size = 22)]
internal unsafe struct Entry
{
    [FieldOffset(0)]
    private fixed char title[14];
    [FieldOffset(14)]
    private readonly int size;
    [FieldOffset(18)]
    private readonly int start;
}

有人会建议Marshal.SizeOf,但它会返回28个字节的非托管对象的大小,这是不受欢迎的。

int count = Marshal.SizeOf(typeof(Entry));

但是,由于数组'customAttributes'的长度始终为0,因此无法获取此属性。

var type = typeof(Entry);
var customAttributes = type.GetCustomAttributes(typeof(StructLayoutAttribute), true);

任何解决方法?

1 个答案:

答案 0 :(得分:5)

StructLayout属性中的信息作为IL指令嵌入到方法中,而不是作为自定义属性。要检索它,您可以使用Type.StructLayoutAttribute Property

var type = typeof(Entry);
var sla = type.StructLayoutAttribute;

或者,如果结构在您的控制之下,您只需定义一个大小常量:

[StructLayout(LayoutKind.Explicit, Pack = 1, Size = Entry.Size)]
internal unsafe struct Entry
{
    public const int Size = 22;
    ...