CustomAttribute 中的 C# CodeDOM 枚举值

Eke*_*ein 2 c# enums codedom

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

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; }
}
Run Code Online (Sandbox Code Playgroud)

其中 Permissions 是一个枚举:

public enum Permissions { R, W, D, RW, RWD }
Run Code Online (Sandbox Code Playgroud)

所以当我生成属性时:

var head = new CodeAttributeDeclaration
{
    Name = "Head",
    Arguments = 
    {
        new CodeAttributeArgument
        {
            Value = new CodePrimitiveExpression(Permissions.RWD)
        },
        new CodeAttributeArgument
        {
            Value = new CodePrimitiveExpression(idValue);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试生成它时,我得到了 ArgumentException 和使用 CodeObjectCreateExpression 的提示,但由于属性只能采用常量值,我想知道如何实现?

svi*_*ick 5

尝试编写您要生成的代码:

[Head(Permissions.RWD, 42)]
Run Code Online (Sandbox Code Playgroud)

如果这样做,您将意识到枚举没有“原始表达式”,您需要像访问静态字段一样编写它:

new CodeFieldReferenceExpression(
    new CodeTypeReferenceExpression(typeof(Permissions)), "RWD")
Run Code Online (Sandbox Code Playgroud)