获取.NET类中的枚举类型

Rob*_*son 3 .net c# reflection enums class

考虑以下C#类声明:

public class MyClass {
    private enum Colours { Red, Green, Blue }
}
Run Code Online (Sandbox Code Playgroud)

它位于一个单独的类库/ DLL中.

仅给出typeof(MyClass)对象(System.Type),有没有办法检查该类是否包含一个名为Colors的运行时枚举,如果是,则返回相应的System.Type对象?

我正在尝试做的是编写一些给定类的类型的通用代码,并确定是否包含一个特定命名的枚举,然后查询枚举中的值.

我知道如何使用Reflection来查询GetFields,GetProperties等内容,但System.Type中没有GetClasses或GetEnums方法.

我怀疑这种信息是在集会中?

Jep*_*sen 10

做就是了:

var res = typeof(MyClass).GetNestedType("Colours", BindingFlags.NonPublic);
Run Code Online (Sandbox Code Playgroud)

测试res != null是否存在此类型.

然后测试res.IsEnum以查看嵌套类型是否为枚举.

添加:如果嵌套类型偶尔嵌套公共,请BindingFlags.NonPublic | BindingFlags.Public改用.