C# 提取C中类中声明的枚举类型#

C# 提取C中类中声明的枚举类型#,c#,enums,C#,Enums,我正在尝试提取类中声明的枚举,具体操作如下: class Program { static void Main(string[] args) { var type = typeof(A); var declaredPublicMembers = type.GetMembers(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.DeclaredOnly);

我正在尝试提取类中声明的枚举,具体操作如下:

class Program
{
    static void Main(string[] args)
    {

        var type = typeof(A);
        var declaredPublicMembers = type.GetMembers(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.DeclaredOnly);
        var enums = declaredPublicMembers.Where(m => m.GetType().IsEnum).ToList();

        Console.WriteLine();
    }
}

public class A
{
    public enum eTest
    {
        a,
        b,
        c
    }
    public int Num { get; set; }

    public Dictionary<int,string> Dic { get; set; }
}
类程序
{
静态void Main(字符串[]参数)
{
变量类型=类型(A);
var declaredPublicMembers=type.GetMembers(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.DeclaredOnly);
var enums=declaredPublicMembers.Where(m=>m.GetType().IsEnum.ToList();
Console.WriteLine();
}
}
公共A类
{
公共枚举测试
{
A.
B
C
}
公共int Num{get;set;}
公共字典Dic{get;set;}
}
但我的伊塞努姆一直在作假

调试时,在将declaredPublicMembers[0]元素转换为System.RuntimeType时,我能够成功地检查该类型是否为枚举

但是
System.RuntimeType
不是公共的,那么如何完成这个任务呢


MemberInfo可以描述一个类型的不同成员类型。在您的例子中,您会得到一个“嵌套类型”。所以问题是,如何从描述嵌套类型的
MemberInfo
实例中获取实际类型。您可以通过强制转换为
类型
,然后检查该类型是否为枚举:

declaredPublicMembers.Where(m => m.MemberType == MemberTypes.NestedType && ((Type)m).IsEnum)
但这段代码只处理嵌套的枚举类型,而不处理字段、属性和方法意义上的枚举成员。为此,请参见

您希望查找所有声明的成员,其中该成员是
类型
(而不是方法、事件、字段等),并且
类型
是枚举

调试时,在将declaredPublicMembers[0]元素转换为System.RuntimeType时,我能够成功地检查该类型是否为枚举

但是System.RuntimeType不是公共的,所以如何完成此任务


Type
是一个抽象类,由
RuntimeType
实现(对于Framework,它在Mono中是一个不同的类)。虽然您将在调试器中看到
RuntimeType
,但如果您正在编写代码,只需使用它的基类
Type
,它提供您所需的一切。

源代码请以文本形式显示。它是,图像也只是用于显示代码中的调试值,
m
MemberInfo
<因此,code>m.GetType()不会返回成员的类型,而是返回
MemberInfo
的类型。
MemberInfo
不是枚举,因此
.IsEnum
返回false。请
CodeCaster
或有人解释这是引用文章的副本吗?枚举不是属性,没有枚举类型的属性,只有声明,这就是我想要的。@Veverke枚举不是
a
的成员,您需要
GetNestedTypes
而不是
GetMembers
typeof(a).GetNestedTypes()。其中(x=>x.IsEnum)
var type = typeof(A);
var declaredPublicMembers = type.GetMembers(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.DeclaredOnly);
var enums = declaredPublicMembers.Where(m => m is Type t && t.IsEnum).ToList();