我想将一些枚举列表传递给我的Attribute属性。但是你可以将List传递给Attribute的属性。所以我尝试将其转换为字符串表示并尝试执行以下操作:
[MyAtt(Someproperty =
Enums.SecurityRight.A.ToString() + "&" + (Enums.SecurityRight.B.ToString() ))]
但是,这会产生错误:“属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式”
我知道你只能传递常数。但是我怎么逃避这个呢?任何技巧?
感谢。
答案 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
,您将调用在运行时使用的代码。您必须使用常量值。