从枚举值创建字典

时间:2013-10-11 10:23:19

标签: c# enums

我有以下枚举:

 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;
        }

谢谢!

2 个答案:

答案 0 :(得分:6)

您可以使用Enumerable.ToDictionary()创建词典。

不幸的是,编译器不允许我们将一个TEnum转换为int,但是因为你已经声明该值是一个Enum,我们可以安全地将它转换为一个对象然后一个int。

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

答案 1 :(得分:2)

//使用此代码:

 Dictionary<string, string> dict = Enum.GetValues(typeof(Brands)).Cast<int>().ToDictionary(ee => ee.ToString(), ee => Enum.GetName(typeof(Brands), ee));