我正在尝试创建一个具有以下自定义属性的类:
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仅可以采用常量值,所以我想知道如何实现?
最佳答案
尝试编写您要生成的代码:
[Head(Permissions.RWD, 42)]
如果这样做,您将意识到枚举没有“原始表达式”,您需要像访问静态字段一样编写它:
new CodeFieldReferenceExpression(
new CodeTypeReferenceExpression(typeof(Permissions)), "RWD")
关于c# - CustomAttribute中的C#CodeDOM枚举值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28936837/