2014-04-15 46 views
0

我正试图增强我的枚举因此我试过a suggestion on Displayanother one on Description显示和描述属性之间的区别

我很烦,因为我不明白他们之间的区别。 Description classDisplay class都来自框架4.5。

这是另外恼人的,因为他们都没有在代码中工作。我测试了下,但我只是能看到驴...

[Flags] 
public enum Donkeys 
{ 
    [Display(Name = "Monkey 1")] 
    Donkey1 = 0, 
    [Description("Monkey 2")] 
    Donkey2 = 1 
} 
+1

你说*他们都没有在代码中工作*但从来没有说过你用它尝试过什么? –

+0

我试过上面的代码。两者都显示为驴而不是猴子。 –

+0

显示在哪里?这是我的问题吗?你在哪里使用它? –

回答

1

无论这些属性对枚举的方法ToString(),这就是被调用,如果你只是试图将其插入任何影响一个剃刀模板。 ToString()总是使用代码中声明的名称 - Donkey1Donkey2您的情况。据我所知,没有内置的方法可以为枚举指定一个替代的字符串表示来自动使用。

我想有(至少)两个原因:

  1. 系列化。 ToString()使用该名称,以便Enum.Parse()可以将其解析回枚举中。
  2. 本地化。 .NET的设计与全球观众牢记在心,如果你想要一个枚举的人类可读的字符串表示,那么极有可能只有一个字符串表示,在这一点上它将取决于你的应用程序找出如何去做。

如果你知道你的应用程序将永远不会被翻译成其他语言,或者如果你只是想你可以在调试输出用的字符串表示,欢迎您使用属性(或者从一个框架,或你自己声明的)为每个枚举值定义一个字符串表示形式,并编写一些实用函数来进行字符串转换。但是你不能让枚举的ToString()为你做(因为这会打破序列化);你必须编写自己的代码来完成它。

但是,由于您正在编写一个Web应用程序,因此您有一个公平的机会,即将有一个全球受众 - 在这种情况下,您需要本地化您的枚举字符串,就像您本地化所有其他文本。

+0

所以我主要必须使用的方法是*开关*,如[这个问题]所示(http://stackoverflow.com/questions/23062683/custom-names-on-enum-elements/23062820?noredirect= 1个#comment35252224_23062820)?有什么更好的建议? –

相关问题