类型生成器设置类型大小

本文关键字:置类型 类型 | 更新日期: 2023-09-27 18:30:17

我正在尝试构建一个动态类型并设置其大小,就像[StructLayout(LayoutKind.Sequential, Size=100)]一样。我有以下代码:

Type structLayoutAttr = typeof(StructLayoutAttribute);
ConstructorInfo structLayoutAttrCtor = structLayoutAttr.GetConstructor(new[]{typeof(LayoutKind)});
object[] structLayoutAttrCtorArgs = new object[]{LayoutKind.Explicit};
FieldInfo[] structLayoutAttrSizeField = new FieldInfo[]{structLayoutAttr.GetField("Size")};
CustomAttributeBuilder cb = new CustomAttributeBuilder(structLayoutAttrCtor, structLayoutAttrCtorArgs, structLayoutAttrSizeField, new object[]{size});
tb.SetCustomAttribute(cb);
type = tb.CreateType();

但是,此代码在最后一步失败 - CreateType抛出有关错误格式的TypeLoadException。是否有正确的方法来应用该属性?

类型生成器设置类型大小

StructLayout 属性是一个特殊属性,它由编译器处理并编译成一个特殊的元数据,因此您无法将其应用于自定义属性构建。检查重载DefineType,有一个需要类型大小的重载。