2015-02-10 94 views
0

我公司擁有一批用於錯誤枚舉,例如:元組或多元字典?

public enum LoginError 
{ 
    None = 0, 
    InvalidUsername, 
    InvalidPassword, 
} 

public enum CustomerError 
{ 
    None = 0, 
    NameRequired, 
    SurnameRequired, 
} 

每個枚舉,我想有存儲在列表中的描述,這樣我就可以做這樣的事情:

string desc = errorList(typeof(LoginError), myError.LoginError); //or something similar 

如果我使用多鍵詞典或元組,它會起作用嗎?任何示例顯示如何做到這一點?

+0

您是否嘗試過'詞典<元組,字符串>'? – juharr 2015-02-10 12:47:31

+0

由於這些是具有不同枚舉的兩種不同的錯誤類型,因此我會創建兩個字典。 – 2015-02-10 12:49:00

+0

如果您通過「描述」表示它們的文本表示,則不應將其存儲在單獨的列表中。你總是可以通過使用Enum.GetName(myenum.GetType(),myenum)來檢索該文本; – Tormod 2015-02-10 13:04:14

回答

0

您可以使用一個枚舉full name string作爲重點。

Dictionary<string,string> map; 

private string GetEnumName(Enum _enum) 
{ 
    return string.Format("{0}.{1}", _enum.GetType().Name, _enum.ToString()); 
} 

void RegisterMapping(Enum @enum, string displayName) 
{ 
    var enumName= GetEnumName(@enum); 
    map.Add(enumName, displayName); 
} 
3

我認爲這會爲你工作,

public enum LoginError 
     { 
      None = 0, 
      InvalidUsername, 
      InvalidPassword, 
     } 

     public enum CustomerError 
     { 
      None = 0, 
      NameRequired, 
      SurnameRequired, 
     } 

     private static void Main(string[] args) 
     { 
      Dictionary<Enum, string> myErrorDictionary = new Dictionary<Enum, string>(); 

      myErrorDictionary.Add(LoginError.None, "This is None from Login Error"); 
      myErrorDictionary.Add(LoginError.InvalidUsername, "Invalid username"); 
      myErrorDictionary.Add(LoginError.InvalidPassword, "Invalid Password"); 

      myErrorDictionary.Add(CustomerError.None, "This is None from Custom Error"); 
      myErrorDictionary.Add(CustomerError.NameRequired, "Name Required"); 
      myErrorDictionary.Add(CustomerError.SurnameRequired, "Surname Required"); 

      Console.WriteLine(myErrorDictionary[LoginError.None]); 
      Console.WriteLine(myErrorDictionary[CustomerError.None]); 

      Console.Read(); 
     } 
+0

我很驚訝,這工作,我今天學到了新東西。這些鍵不僅僅是枚舉的整數值(重疊),而是即使枚舉值相同也被認爲不相等的枚舉值。 – 2015-02-10 13:05:01