我正在尝试增强我的枚举,所以我尝试了一个关于Display的建议和另一个关于Description 的建议。
我很生气,因为我不明白它们之间的区别。既描述类和显示类是从框架4.5。
这也很烦人,因为它们都没有在代码中工作。我正在测试以下内容,但我只能看到驴......
[Flags]
public enum Donkeys
{
[Display(Name = "Monkey 1")]
Donkey1 = 0,
[Description("Monkey 2")]
Donkey2 = 1
}
Run Code Online (Sandbox Code Playgroud)
这些属性对枚举的方法没有任何影响ToString(),如果您只是尝试将其插入 Razor 模板,则会调用该方法。ToString()始终使用代码中声明的名称 -Donkey1以及Donkey2您的情况。据我所知,没有内置方法可以指定枚举自动使用的替代字符串表示形式。
我认为(至少)有两个原因:
ToString()使用名称以便Enum.Parse()可以将其解析回枚举。如果您知道您的应用程序永远不会被翻译为其他语言,或者您只是想要一种可以在调试输出中使用的字符串表示形式,那么欢迎您使用一个属性(来自框架的属性或您自己声明的属性)来为每个枚举值定义一个字符串表示形式,并编写一些实用函数来进行字符串转换。但是你不能让枚举ToString()为你做这件事(因为这会破坏序列化);你必须编写自己的代码才能做到这一点。
然而,由于您正在编写一个 Web 应用程序,因此您很有可能拥有全球受众 - 在这种情况下,您需要像本地化所有其他文本一样本地化您的枚举字符串。