Auflistung der Werte innerhalb von enums mit der spiegelung in C#
Ich versuche, reflektion verwenden, um eine Liste der öffentliche member und Methoden, die von ein paar Klassen in verschiedenen Projekten innerhalb einer Visual Studio-Projektmappe. Alle Klassen, die ich versuche, access und C# sind Sie alle, auf die zugegriffen wird, aus einer C# - Klasse. Der code, den ich verwende, um diese Anrufe ist wie folgt:
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());
}
}
Meisten Ausgänge funktionieren (z.B. Int32, Double, System.String). Mein problem ist, dass wenn ich versuche, eine Liste der Enumerationen, die bekomme ich auch eine Ausgabe auf der Konsole sieht wie folgt aus:
Namespace.Subspace.event+EVENT_TYPE
Ich würde gerne in der Lage sein, um alle zu sehen die inneren Werte des enum-statt nur seinen Namen. Zum Beispiel die enum -
public enum EVENT_TYPE
{
EVENTDOWN,
EVENTMOVE,
EVENTUP,
}
ausgeben sollte so etwas wie dieses
Namespace.Subspace.class+EVENT_TYPE EVENTDOWN
Namespace.Subspace.class+EVENT_TYPE EVENTMOVE
Namespace.Subspace.class+EVENT_TYPE EVENTUP
Jede Hilfe, die jedermann bieten würde sehr geschätzt werden. Ich habe erschöpft alles, was ich habe finden können, die bisher aber eine frische Perspektive wäre schön.
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
System.Enum.GetNames(typeof(EVENT_TYPE))
.werden Sie wahrscheinlich zu tun haben in diesem speziellen Fall (nicht mit der Reflexion für enums).
wie man enum und die Werte per reflection
Enumerationen, umgesetzt als public static readonly-Felder (wohl auch const); Ihren aktuellen code sollte funktionieren... Sie müssen nur den Namen aus der FieldInfo. Und Aufruf von GetValue wenn Sie wollen den Wert.
Jedoch, Enum.GetValues(Typ) ist einfacher...
Also in deinem Fall die überprüfung, ob Quelle ist ein enum-Typ und rufen dann GetEnumNames() würde es erlauben, den code zu handeln, die auf Klassen, enums etc.
Es ist ein Weg, um call-in paar Zeilen
Und dann diese
Ausgabe