2013-10-11 6 views
1

У меня есть следующие перечисления:Создать словарь из перечисления значений

public enum Brands 
    { 
     HP = 1, 
     IBM = 2, 
     Lenovo = 3 
    } 

От этого я хочу сделать словарь в формате:

// key = name + "_" + id 
// value = name 

var brands = new Dictionary<string, string>(); 
brands[HP_1] = "HP", 
brands[IBM_2] = "IBM", 
brands[Lenovo_3] = "Lenovo" 

До сих пор я сделал это, но есть трудности создание словаря по методу:

public static IDictionary<string, string> GetValueNameDict<TEnum>() 
     where TEnum : struct, IConvertible, IComparable, IFormattable 
     { 
      if (!typeof(TEnum).IsEnum) 
       throw new ArgumentException("TEnum must be an Enumeration type"); 

      var res = from e in Enum.GetValues(typeof (TEnum)).Cast<TEnum>() 
         select // couldn't do this 

      return res; 
     } 

Спасибо!

ответ

6

Вы можете использовать Enumerable.ToDictionary() для создания своего Словаря.

К сожалению, компилятор не позволяет нам вводить TEnum в int, но поскольку вы уже утверждали, что это значение Enum, мы можем смело отнести его к объекту, а затем int.

var res = Enum.GetValues(typeof(TEnum)).Cast<TEnum>().ToDictionary(e => e + "_" + (int)(object)e, e => e.ToString()); 
2

// Используйте этот код:

Dictionary<string, string> dict = Enum.GetValues(typeof(Brands)).Cast<int>().ToDictionary(ee => ee.ToString(), ee => Enum.GetName(typeof(Brands), ee)); 
Смежные вопросы