2015-02-10 66 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