与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时出现很多误报。
答案 0 :(得分:5)
你快到了。只需使用
if (property.PropertyType.IsEnum)
// Celebrate
在.NET 4.5中,您可能需要从属性类型中获取TypeInfo对象。
答案 1 :(得分:4)
property
是PropertyInfo
个对象
PropertyInfo
不会继承Enum
,因此永远不会成为现实。
您想要检查PropertyType
- 描述属性返回类型的Type
对象。
if (property.PropertyType is Enum)
也不起作用,出于同样的原因 - Type
不会继承Enum
。
相反,您需要查看Type
对象的属性,以查看它是否为枚举类型。
在这种情况下,您可以使用其IsEnum
属性;在更一般的情况下,您需要致电IsSubclassOf()
。