我正在使用像这样的数据注释:
[RequiresAnyRole("Admin", "Member")]
我不喜欢传递字符串,因为稍后重构可能会很麻烦,但是如果我尝试像这样创建枚举:
public enum Roles
{
Admin,
Member
}
然后尝试将枚举转换为字符串,如下所示:
[RequiresAnyRole(Roles.Admin.ToString(), Roles.Member.ToString())]
然后我得到错误:
错误CS0182属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式
我对这个错误的理解是,它在编译时必须是一个字符串。我想用枚举作为关键字制作一个静态字典,但这也不起作用。
传递这些值的最佳方式是什么,以便以后可以重构,即不传递字符串而是传递某种可以更新的引用?
这是一个很好的使用机会nameof
。你可以保留枚举,并执行以下操作:
[RequiresAnyRole(nameof(Roles.Admin), nameof(Roles.Member))]
nameof
表达式是常量表达式。
当然,如果可以更改属性的声明,则应更改它以接受你的Roles
枚举。