属性错误:属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式

时间:2011-10-12 05:05:13

标签: c# .net

我想将一些枚举列表传递给我的Attribute属性。但是你可以将List传递给Attribute的属性。所以我尝试将其转换为字符串表示并尝试执行以下操作:

[MyAtt(Someproperty = 
            Enums.SecurityRight.A.ToString() + "&" + (Enums.SecurityRight.B.ToString() ))]

但是,这会产生错误:“属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式”

我知道你只能传递常数。但是我怎么逃避这个呢?任何技巧?

感谢。

1 个答案:

答案 0 :(得分:7)

如果我的C#编码关闭,请原谅我。我用VB。

您可以使用const值。

namespace Enums {
    static class SecurityRight {
        const String A = "A";
        const String B = "B";
    }
}

[MyAtt(StringProperty = Enums.SecurityRight.A + "&" + Enums.SecurityRight.B)]

如果属性接受与枚举相同的数据类型,则可以使用enum

namespace Enums {
    [Flags()]
    enum int SecurityRight {
        A = 1;
        B = 2;
    }
}

[MyAtt(IntegerProperty = Enums.SecurityRight.A | Enums.SecurityRight.B)]

编辑:更改了上面的IntegerProperty以获得多个值。

属性在编译时设置,而不是在运行时设置。通过使用ToString,您将调用在运行时使用的代码。您必须使用常量值。