2013-05-15 16 views
0

最好的辦法可以說我有一個枚舉的定義,像這樣:是什麼標籤附加到枚舉值

public enum eCommentType 
    { 
     NormalComment = 0, 
     OpenningComment = 1, 
     StartProgressCommetn = 2, 
     ClouserComment = 3, 
     ReopennignComment = 4 
    } 

現在我想提出一個網頁上的enum選項。 我可以只使用switch語句,但是當我添加一個新的值時,我將不得不更新我的switch語句。 什麼是最好的方式追加一個標籤到每個值或事件更好的資源ID來支持多語言界面?

P.S 我使用MVC爲我當前的項目,但我將不勝感激一個普遍的答案,可以用於多種技術,即設計模式。

+0

'DescriptionAttribute'文本? http://blogs.msdn.com/b/paulwhit/archive/2008/03/31/use-the-descriptionattribute-with-an-enum-to-display-status-messages.aspx –

+0

http:// stackoverflow。 com/questions/12403065/how-can-i-assign-a-string-to-an-enum-instead-of-an-integer-value-in-c/12403191#12403191 – Habib

+1

請停止提及「ASP。 NET MVC「簡稱爲」MVC「。一個是框架,而另一個是獨立於語言的設計模式。這就像打電話給IE - 「互聯網」 –

回答

1

事件更好的資源ID來支持多語言界面?

你可以獲取從資源

var text = normalComment.GetName(); 


public static class EnumExtension 
{ 
     public static string GetName(this eCommentType type) 
     { 
      return Strings.ResourceManager.GetString(type.ToString()); 
     } 
} 
0

的字符串返回枚舉的名稱,或者您可以使用標籤[說明(「yournamehere」)爲每一個枚舉和使用

public enum eCommentType 
{ 
    [Description("my super normal comment")] 
    NormalComment = 0, 
    [Description("my super opening comment")] 
    OpenningComment = 1, 
    [Description("etc")] 
    StartProgressCommetn = 2, 
    [Description("etc")] 
    ClouserComment = 3, 
    [Description("etc")] 
    ReopennignComment = 4 
} 
0

在.NET世界中,你可以通過解決這個將屬性添加到您的枚舉中,並實現自定義類型轉換器,該類型轉換器可以使用來自屬性的資源ID將相應的枚舉值轉換爲本地化文本

這種方法基本上與Fabio Marcolini提供的方法相同,定製型號轉換器將使描述本地化

0

如果您需要描述裏面的物品的展現給用戶,你可以使用:

Enum.GetValues,如:

var values = Enum.GetValues(typeof(eCommentType)); 

但儘管如此,MVC是不是通常只有約演示,但也是UI和模型之間的綁定,所以通常你需要地圖值在屏幕上可見實際值eCommentType enum你將不得不有一些「映射器」,將一個數據轉換爲另一個。

是的,你也可以使用相同的函數遍歷所有可用的值並找到請求的函數,在得到它的INT之後,但我會盡量簡單明瞭switch/case,除非枚舉值數量變大。