.Net通过反射得到枚举类型

时间:2014-01-23 12:35:36

标签: .net reflection enums

我的结构有很多属性,所有枚举。

我喜欢做的是遍历属性并获取枚举的基础类型或值的枚举列表。因此,我可以为它们创建下拉列表,而无需为每个代码编写代码。

我设法获得所选值,枚举名称,描述等。但我仍然坚持这一部分。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以使用反射轻松遍历类的每个属性,并确定哪些是枚举,哪些不是(通过使用PropertyType类的IsEnum属性)。 对于您找到的每个枚举,您可以检查其基础类型。

您可以使用这种通用的扩展方法:

   public static IDictionary<string, string> EnumToDictionary(this Type t)
    {
        if (t == null) throw new NullReferenceException();
        if (!t.IsEnum) throw new InvalidCastException("object is not an Enumeration");

        string[] names = Enum.GetNames(t);
        Array values = Enum.GetValues(t);

        return (from i in Enumerable.Range(0, names.Length)
                select new { Key = names[i], Value = (int)values.GetValue(i) })
                    .ToDictionary(k => k.Key, k => k.Value.ToString());
    }

然后对你在课堂上找到的每个枚举类型调用它:

var result = typeOfEnum.EnumToDictionary();

其中typeOfEnum是您在迭代类的属性时找到的枚举的基础类型。

然后,您可以使用结果使用枚举的名称和值填充相应的下拉列表。