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

Вы пробовал 'Dictionary , строку>'? – juharr

+0

Поскольку это два разных типа ошибок с отдельными перечислениями, я бы создал два словаря. –

+0

Если вы по описанию означают их текстовое представление, вы не должны хранить это в отдельном списке. Вы всегда можете получить этот текст, используя Enum.GetName (myenum.GetType(), myenum); – Tormod

ответ

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

Я очень удивлен, что это работает, и сегодня я узнал что-то новое. Ключи - это не только интегральные значения перечислений (которые перекрываются), но и значения в ядре, которые считаются не равными, хотя значения базового перечисления одинаковы. –

Смежные вопросы