【问题标题】:How to get the list of Enum properties of a class?如何获取类的枚举属性列表?
【发布时间】:2014-02-27 07:56:38
【问题描述】:

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# 枚举是原始计数类型(默认为 int,但也可能是 byte、short 等)之上的包装器。我可以轻松地测试这些属性是否属于这些类型,但这会导致我在搜索 Enums 时出现很多误报。

【问题讨论】:

    标签: c# .net reflection properties enums


    【解决方案1】:

    你快到了。只需使用

    if (property.PropertyType.IsEnum)
        // Celebrate
    

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

    【讨论】:

      【解决方案2】:

      property 是一个 PropertyInfo 对象。
      PropertyInfo 不继承 Enum,所以这永远不会是真的。

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

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

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

      【讨论】:

        猜你喜欢
        • 2020-12-31
        • 2011-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-20
        相关资源
        最近更新 更多