在C#中使用reflection列举枚举值

我正在尝试使用reflection来列出一个Visual Studio解决scheme中的各个项目中的几个类的公共成员和方法。 我尝试访问的所有类都是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()); } } 

大多数输出​​工作正常(即Int32,Double,System.String)。 我的问题是,当我试图列出枚举,我得到一个输出到控制台,看起来像这样:

 Namespace.Subspace.event+EVENT_TYPE 

我希望能够看到枚举的所有内部值,而不仅仅是它的名字。 例如,枚举

 public enum EVENT_TYPE { EVENTDOWN, EVENTMOVE, EVENTUP, } 

应该输出这样的东西

 Namespace.Subspace.class+EVENT_TYPE EVENTDOWN Namespace.Subspace.class+EVENT_TYPE EVENTMOVE Namespace.Subspace.class+EVENT_TYPE EVENTUP 

任何人都可以提供帮助将不胜感激。 到目前为止,我已经用尽了所有能够find的东西,但是全新的视angular会很好。

谢谢

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

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

枚举被实现为公共静态只读字段(可能也是const); 你当前的代码应该工作…你只需要从FieldInfo获取名称。 如果你想要的值,并调用GetValue。

但是,Enum.GetValues(类型)更容易…

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

 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() } } } } 

所以在你的情况下检查源是一个枚举类型,然后调用GetEnumNames()将允许代码在类,枚举等

  private void Work() { var type = typeof(numbers); string [] members; if(type.IsEnum) members = typeof(numbers).GetEnumNames(); } public enum numbers { one, two, three, }