2014-04-15 49 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)?有什麼更好的建議? –

相關問題