C# 在数据注释中使用枚举

C# 在数据注释中使用枚举,c#,.net-core,C#,.net Core,我使用的数据注释如下所示: [RequiresAnyRole("Admin", "Member")] 我不喜欢传递字符串,因为这可能是一个痛苦的重构,但如果我尝试这样做一个枚举: public enum Roles { Admin, Member } 然后尝试将枚举强制转换为字符串,如下所示: [RequiresAnyRole(Roles.Admin.ToString(), Roles.Member.ToString())] 然后我得

我使用的数据注释如下所示:

[RequiresAnyRole("Admin", "Member")]
我不喜欢传递字符串,因为这可能是一个痛苦的重构,但如果我尝试这样做一个枚举:

public enum Roles
{
    Admin,
    Member
}
然后尝试将枚举强制转换为字符串,如下所示:

[RequiresAnyRole(Roles.Admin.ToString(), Roles.Member.ToString())]
然后我得到一个错误:

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

我对这个错误的理解是,它在编译时必须是一个字符串。我曾尝试制作一个以enum为键的静态字典,但也没有成功


以稍后可以重构的方式传递这些值的最佳方式是什么,即不传递字符串,而是传递某种可以更新的引用?

这是一个很好的使用机会。您可以保留枚举,并执行以下操作:

[RequiresAnyRole(nameof(Roles.Admin), nameof(Roles.Member))]
nameof
表达式是常量表达式


当然,如果您可以更改属性的声明,那么应该将其更改为接受您的
角色
枚举。

这是一个很好的使用机会。您可以保留枚举,并执行以下操作:

[RequiresAnyRole(nameof(Roles.Admin), nameof(Roles.Member))]
nameof
表达式是常量表达式

当然,如果可以更改属性的声明,那么应该将其更改为接受
角色
枚举