2012-06-21 73 views
2

我有這樣的枚舉:將枚舉轉換爲自定義對象列表?

public enum Translation  
{ 
    English=1, 
    Russian, 
    French, 
    German 
} 

我有一個自定義對象

public class MyKeyValuePair 
{ 
    string code {set;get;} 
    string text {set;get;} 

} 

我想我所有的枚舉成員到MyKeyValuePair列表。 我該怎麼做?

回答

4

假設「代碼」應該僅僅是整數的字符串表示,它聽起來就像你想要的東西,如:

​​

注意,使用枚舉值的名稱作爲其文本表示是非常有限的 - 你只能使用使用有效的C#標識符。你可能會發現它在長期有利於使用屬性來描述文本,至少作爲一個覆蓋:

public enum Translation { 
    ... 
    [Description("Traditional Chinese")] 
    TraditionalChinese 
} 

屬性還允許您添加其他數據 - 例如,如果你不想讓代碼只是整數表示,你可以把它放在枚舉中。你需要通過反射來獲得屬性。我支持DescriptionAttributeUnconstrained Melody這使得各種枚舉任務更簡單,但其他屬性需要更多的工作。

再一次,另一種選擇是使用集合初始值設定項,直接在代碼中構建字典或集合。說實話,你沒有足夠清楚你的所作所爲。希望這有助於儘管。

+0

該屬性是一個內置的C#東西嗎? o.O – Alxandr

+0

@Alxandr:'DescriptionAttribute'沒有內置到語言中,沒有。這只是一個常規屬性。 (雖然屬性本身*被內置到語言中) –

+0

是的,我知道(我寫了很多C#,並且自己製作了相當多的屬性),但是我想知道的更像是什麼; 'DisplayAttribute'會改變枚舉的'ToString'嗎?因爲我曾經不得不做這樣的事情,而我所做的就是創建自己的屬性並擁有'ToString'方法xD – Alxandr

0

簡單;創建一個靜態方法,如下所示:

public static mykeyvaluePair Translate(Translation translation) { 
    switch(translation) { 
     case Translation.English: 
      return new mykeyvaluePair { code = "en", text = "English" }; 
     case Translation.Russian: 
      return new mykeyvaluePair { code = "ru", text = "Russian" }; 
     default: 
      return null; 
    } 
}