【问题标题】:.Net getting enum type through reflection.Net 通过反射获取枚举类型
【发布时间】:2014-01-23 12:35:35
【问题描述】:

我有一个包含一堆属性的结构,都是枚举。

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

我设法获得了选定的值、枚举名称、描述等。但我被困在这部分。任何帮助将不胜感激。

【问题讨论】:

  • 你有一些代码来显示你是如何访问属性的吗?有一个 Enum.GetValues(type) 来获取枚举的值。

标签: .net reflection enums


【解决方案1】:

您可以使用反射轻松遍历类的每个属性,并确定其中哪些是枚举,哪些不是(通过使用 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 是您在遍历类的属性时发现的枚举的基础类型。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2017-11-07
    • 2011-06-12
    • 2015-12-20
    • 1970-01-01
    相关资源
    最近更新 更多