我正在尝试创建一个具有自定义属性的类,如下所示:
public class Head : Attribute
{
public Head(Permissions permission, int id)
{
Permission = permission;
Id = id;
}
public int Id { get; private set; }
public Permissions Permission { get; private set; }
}
其中Permissions是枚举:
public enum Permissions { R, W, D, RW, RWD }
所以当我生成属性时:
var head = new CodeAttributeDeclaration
{
Name = "Head",
Arguments =
{
new CodeAttributeArgument
{
Value = new CodePrimitiveExpression(Permissions.RWD)
},
new CodeAttributeArgument
{
Value = new CodePrimitiveExpression(idValue);
}
}
}
当我尝试生成这个时,我得到ArgumentException并提示使用CodeObjectCreateExpression,但由于Attributes只能采用常量值,我想知道如何实现这一点?
答案 0 :(得分:3)
尝试编写您想要生成的代码:
[Head(Permissions.RWD, 42)]
如果你这样做,你会发现枚举没有“原始表达”,你需要像访问静态字段一样编写它:
new CodeFieldReferenceExpression(
new CodeTypeReferenceExpression(typeof(Permissions)), "RWD")