如何获取类的枚举属性列表?

时间:2014-02-03 17:45:28

标签: c# .net reflection properties enums

How to get the list of properties of a class?密切相关,我已经得到了这个问题,但我很想知道哪些返回的属性是枚举。我的第一个(不太可能的)猜测是:

foo A;

foreach (var property in A.GetType().GetProperties())
{
    if (property.PropertyType is Enum)
        //Celebrate
}

这不起作用。这是有效的,但Visual Studio甚至能够提前警告“给定的表达式永远不会提供('System.Enum')类型”。

据我所知,C#Enums是原始计数类型之上的包装器(默认为int,但也可能是byte,short等)。我可以轻松地测试以查看这些类型的属性,但这会导致我在搜索Enums时出现很多误报。

2 个答案:

答案 0 :(得分:5)

你快到了。只需使用

if (property.PropertyType.IsEnum)
    // Celebrate

在.NET 4.5中,您可能需要从属性类型中获取TypeInfo对象。

答案 1 :(得分:4)

propertyPropertyInfo个对象 PropertyInfo不会继承Enum,因此永远不会成为现实。

您想要检查PropertyType - 描述属性返回类型的Type对象。

if (property.PropertyType is Enum)也不起作用,出于同样的原因 - Type不会继承Enum

相反,您需要查看Type对象的属性,以查看它是否为枚举类型。
在这种情况下,您可以使用其IsEnum属性;在更一般的情况下,您需要致电IsSubclassOf()