使用C#中的反射在枚举中列出值

Rya*_*ins 7 c# windows reflection enums

我试图使用反射列出一个Visual Studio解决方案中的各种项目中的几个类的公共成员和方法.我试图访问的所有类都是C#,它们都是从C#类访问的.我用来进行这些调用的代码如下:

public void PopulateEventParamTree()
    {
        System.Console.WriteLine(source.GetType().ToString());
        Type type = (Type)source.getEventType();
        System.Console.WriteLine(type.ToString());

        foreach (MemberInfo member in type.GetMembers())
        {
            System.Console.WriteLine("\t" + member.ToString());
        }
    }
Run Code Online (Sandbox Code Playgroud)

大多数输出​​工作正常(即Int32,Double,System.String).我的问题是,当我尝试列出枚举时,我得到一个输出到控制台,如下所示:

Namespace.Subspace.event+EVENT_TYPE
Run Code Online (Sandbox Code Playgroud)

我希望能够看到枚举的所有内在值而不仅仅是它的名称.例如,枚举

public enum EVENT_TYPE
{
    EVENTDOWN,
    EVENTMOVE,
    EVENTUP,
}
Run Code Online (Sandbox Code Playgroud)

应该输出这样的东西

Namespace.Subspace.class+EVENT_TYPE EVENTDOWN
Namespace.Subspace.class+EVENT_TYPE EVENTMOVE
Namespace.Subspace.class+EVENT_TYPE EVENTUP
Run Code Online (Sandbox Code Playgroud)

任何人都可以提供的任何帮助将不胜感激.我已经筋疲力尽了迄今为止我能找到的一切,但是新的视角会很好.

谢谢

Ste*_*e B 13

使用System.Enum.GetNames(typeof(EVENT_TYPE)).

你可能不得不处理这种特殊情况(不使用枚举的反射).


小智 8

如何通过反射获取枚举和值

var importAssembly = System.Reflection.Assembly.LoadFile("test.dll");     
Type[] types = importAssembly.GetTypes();
     foreach (Type type in types)
        {
        if (type.IsEnum)
        {
               var enumName=type.Name;
               foreach (var fieldInfo in type.GetFields())
               {
                  if (fieldInfo.FieldType.IsEnum)
                  {
                      var fName=fieldInfo.Name;
                      var fValue=fieldInfo.GetRawConstantValue()
                  }
              }
         }
    }
Run Code Online (Sandbox Code Playgroud)