【问题标题】:CodeDom code generation, TypeAttribute ExplicitLayout doesn't generate a custom attribute?CodeDom 代码生成,TypeAttribute ExplicitLayout 不生成自定义属性?
【发布时间】:2014-12-02 19:30:22
【问题描述】:

我正在使用 CodeDom 生成结构,我试图通过自定义属性指示字段的显式布局。 我已经设法使用普通的CodeAttributeDeclaration 实例来做到这一点,但后来我注意到枚举 System.Reflection.TypeAttributes 包含一个名为 ExplicitLayout 的字段,这应该是我正在寻找的。我是这样用的:

CodeTypeDeclaration type = new CodeTypeDeclaration();
type.Name = "MyStructure";
type.IsStruct = true;
type.TypeAttributes = TypeAttributes.Public | TypeAttributes.ExplicitLayout;

但是这并没有生成我需要的StructLayout 属性,为什么?

【问题讨论】:

  • 因为这不是决定一个类型是否真正具有该属性的因素。例如,struct 类型将有 Type.IsExplicitLayout 返回 true,但它实际上没有属性。它仅用于反射目的,而不是用于生成代码。
  • 感谢@Hans,所以 TypeAttributes 枚举不适用于我正在寻找的东西,明白了。

标签: c# code-generation codedom


【解决方案1】:

System.TypesAttributes.ExplicitLayout 不会自动生成StructLayoutAttribute,所以我必须“手动”声明它:

type.CustomAttributes.Add(new CodeAttributeDeclaration("StructLayout",
    new CodeAttributeArgument(new CodeFieldReferenceExpression(new CodeTypeReferenceExpression(typeof(LayoutKind)), "Explicit"))));

【讨论】:

    猜你喜欢
    • 2011-09-01
    • 1970-01-01
    • 2011-01-18
    • 2011-01-08
    • 2011-08-29
    • 1970-01-01
    • 2018-09-12
    • 2016-08-24
    • 2016-10-03
    相关资源
    最近更新 更多