我正在尝试创建一个具有以下自定义属性的类:

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/

10-09 01:09
查看更多