Ich habe folgenden Code:
// Obtain the string names of all the elements within myEnum
String[] names = Enum.GetNames( typeof( myEnum ) );
// Obtain the values of all the elements within myEnum
Array values = Enum.GetValues( typeof( myEnum ) );
// Print the names and values to file
for ( int i = 0; i < names.Length; i++ )
{
print( names[i], values[i] );
}
Ich kann jedoch keine Werte indizieren. Gibt es einen einfacheren Weg, dies zu tun?
Oder habe ich etwas ganz verpasst!
Enum.GetName(typeof(MyEnum), val), (int)val)
in der die Ausgabe den Namen und die Nummer der Aufzählung enthält.Cast<T>
das Ergebnis aufrufen :Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>()...
Sie müssen das Array umwandeln - das zurückgegebene Array ist tatsächlich vom angeforderten Typ, dh
myEnum[]
wenn Sie fragentypeof(myEnum)
:Dann
values[0]
usw.quelle
Sie können dieses Array in verschiedene Arten von Arrays umwandeln:
oder wenn Sie die ganzzahligen Werte wollen:
Sie können diese gegossenen Arrays natürlich iterieren :)
quelle
Wie wäre es mit einer Wörterbuchliste?
und natürlich können Sie den Wörterbuchwerttyp auf Ihre Aufzählungswerte ändern.
quelle
Eine andere Lösung mit interessanten Möglichkeiten:
quelle
Hier ist noch einer. Wir mussten unseren EnumValues freundliche Namen geben. Wir haben das System.ComponentModel.DescriptionAttribute verwendet, um einen benutzerdefinierten Zeichenfolgenwert für jeden Aufzählungswert anzuzeigen.
In Benutzung
Dies endet mit der Rückgabe von "Something 1", "Something 2".
quelle
Was ist mit einer foreach-Schleife? Vielleicht könnten Sie damit arbeiten?
so etwas vielleicht?
quelle
Alte Frage, aber ein etwas sauberer Ansatz mit LINQs
.Cast<>()
quelle
Das Array verfügt über eine GetValue (Int32) -Methode, mit der Sie den Wert an einem angegebenen Index abrufen können.
Array.GetValue
quelle
Sie können dies mithilfe von Formatzeichenfolgen vereinfachen. Ich verwende das folgende Snippet in Nutzungsnachrichten:
Der D-Formatbezeichner formatiert den Aufzählungswert als Dezimalzahl. Es gibt auch einen X-Bezeichner, der eine hexadezimale Ausgabe liefert.
Der G-Bezeichner formatiert eine Aufzählung als Zeichenfolge. Wenn das Flags-Attribut auf die Aufzählung angewendet wird, werden auch kombinierte Werte unterstützt. Es gibt einen F-Bezeichner, der so wirkt, als ob Flags immer vorhanden sind.
Siehe Enum.Format ().
quelle
In den Enum.GetValues-Ergebnissen erzeugt das Umwandeln in int den numerischen Wert. Die Verwendung von ToString () erzeugt den Anzeigenamen. Es sind keine weiteren Aufrufe von Enum.GetName erforderlich.
quelle
Hier ist eine einfache Möglichkeit, Ihr benutzerdefiniertes Enum-Objekt zu durchlaufen
quelle
Alte Frage, aber die Antwort von 3Dave lieferte den einfachsten Ansatz. Ich brauchte eine kleine Hilfsmethode, um ein SQL-Skript zu generieren und einen Enum-Wert in der Datenbank zum Debuggen zu dekodieren. Es hat super funktioniert:
Ich habe es in einer statischen Methode, daher ist die Verwendung:
quelle