Warm tip: This article is reproduced from serverfault.com, please click

c#-在数据注释中使用枚举

(c# - Using enum in data annotation)

发布于 2020-11-28 03:30:43

我正在使用像这样的数据注释:

[RequiresAnyRole("Admin", "Member")]

我不喜欢传递字符串,因为稍后重构可能会很麻烦,但是如果我尝试像这样创建枚举:

public enum Roles
{
    Admin,
    Member
}

然后尝试将枚举转换为字符串,如下所示:

[RequiresAnyRole(Roles.Admin.ToString(), Roles.Member.ToString())]

然后我得到错误:

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

我对这个错误的理解是,它在编译时必须是一个字符串。我想用枚举作为关键字制作一个静态字典,但这也不起作用。

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

Questioner
Guerrilla
Viewed
0
Sweeper 2020-11-28 11:34:54

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

[RequiresAnyRole(nameof(Roles.Admin), nameof(Roles.Member))]

nameof 表达式是常量表达式。

当然,如果可以更改属性的声明,则应更改它以接受你的Roles枚举。