Attribute von Enums Wert erhalten
Ich würde gerne wissen, ob es möglich ist, zu erhalten Attribute der enum-Werte und nicht die enum selbst? Zum Beispiel, angenommen ich habe folgende enum:
using System.ComponentModel; //for DescriptionAttribute
enum FunkyAttributesEnum
{
[Description("Name With Spaces1")]
NameWithoutSpaces1,
[Description("Name With Spaces2")]
NameWithoutSpaces2
}
Was ich will, ist angesichts der enum-Typ, produzieren 2-Tupel enum string-Wert und dessen Beschreibung.
Wert war leicht:
Array values = System.Enum.GetValues(typeof(FunkyAttributesEnum));
foreach (int value in values)
Tuple.Value = Enum.GetName(typeof(FunkyAttributesEnum), value);
Aber wie bekomme ich die Beschreibung Attribut-Wert, der zum Auffüllen Tupel.Desc? Ich kann mir denken, wie es zu tun, wenn das Attribut gehört zu den enum selbst, aber ich bin an einem Verlust, wie man es aus dem Wert des enum.
InformationsquelleAutor der Frage Alex K | 2009-11-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollte dies tun, was Sie brauchen.
InformationsquelleAutor der Antwort Bryan Rowe
Dieses Stück code sollte Ihnen eine nette kleine extension-Methode auf jedem enum, können Sie abrufen, eine generische Attribut. Ich glaube, es ist anders als die lambda-Funktion oben, weil es einfacher zu benutzen und zu leicht - Sie brauchen nur pass in den generischen Typ.
InformationsquelleAutor der Antwort AdamCrawford
Dies ist eine generische Implementierung verwendet einen lambda-Ausdruck für die Auswahl
Nennen mag:
InformationsquelleAutor der Antwort Scott Belchak
Ich zusammengeführt haben, ein paar der Antworten hier ein wenig mehr erweiterbare Lösung. Ich bin die Bereitstellung von it-nur für den Fall ist es hilfreich, jemand in der Zukunft. Original-posting hier.
Diese Lösung schafft ein paar Erweiterung Methoden auf Enum. Die erste ermöglicht Ihnen die reflektion verwenden, um jegliche attribute verbunden, die mit Ihrem Wert. Die zweite fordert insbesondere ruft die
DescriptionAttribute
und gibt esDescription
Wert.Als ein Beispiel, sollten Sie die
DescriptionAttribute
Attribut ausSystem.ComponentModel
Um die oben genannten extension-Methode, Sie würde jetzt rufen Sie einfach die folgende:
oder
InformationsquelleAutor der Antwort Troy Alford
Neben AdamCrawford Antworthabe ich weitere erstellt eine spezielle Erweiterung-Methoden, die Einspeisung der es um die Beschreibung zu erhalten.
daher, um die Beschreibung zu erhalten, können Sie entweder verwenden Sie die original-extension-Methode als
oder Sie können einfach rufen Sie die extension-Methode hier:
Sollte hoffentlich machen Sie Ihren code ein wenig lesbarer zu gestalten.
InformationsquelleAutor der Antwort FunksMaName
Fließend one-liner...
Hier bin ich mit dem
DisplayAttribute
enthält sowohl dieName
undDescription
Eigenschaften.Beispiel
- Ausgang
InformationsquelleAutor der Antwort Aydin Adn
Hier ist der code, um Informationen von einem Display-Attribut. Es verwendet eine generische Methode zum abrufen des Attributs. Wenn das Attribut nicht gefunden wird, wandelt es den enum-Wert einen string mit pascal/camel-case konvertiert Titel Fall (code erhalten hier)
Ist und diese Erweiterung-Methode für strings, für die Konvertierung in Titel Fall:
InformationsquelleAutor der Antwort Colin
Bekommen das Wörterbuch von enum.
Rufen Sie nun diese wie...
EnumDecription Ext-Methode
InformationsquelleAutor der Antwort Jitendra Pancholi
Ich implementiert diese Erweiterung Methode um die Beschreibung von enum-Werte. Es funktioniert für alle Art von enums.
InformationsquelleAutor der Antwort Nick N.
Hier ist die .NET-Core-version des AdamCrawford Antwort, mit System.Reflexion.TypeExtensions;
InformationsquelleAutor der Antwort wonea
Hinzufügen meine Lösung für Net Framework und NetCore.
Habe ich dies für meine Net-Framework-Implementierung:
Funktioniert das nicht bei NetCore also habe ich es geändert, um dies zu tun:
Enumeration Beispiel:
Beispiel für statische Hinzugefügt:
InformationsquelleAutor der Antwort HouseCat
Nutzen einige der neueren C# - Sprachfeatures, können Sie reduzieren die Anzahl Zeilen:
InformationsquelleAutor der Antwort Rob Lyndon
Diese Erweiterung Methode erhalten Sie eine string-Darstellung eines enum-Wert mit seiner XmlEnumAttribute. Wenn keine XmlEnumAttribute vorhanden ist, fällt es zurück zu enum.ToString().
InformationsquelleAutor der Antwort saille
Und wenn Sie wollen die volle Liste der Namen, die Sie tun können, so etwas wie
InformationsquelleAutor der Antwort Marco
Ich diese Antwort, um das setup eine combo-box enum-Attribute, die war toll.
Ich dann benötigt, um code der Rückseite, so dass ich kann die Auswahl aus der box und Rückkehr der enum in den richtigen Typ.
Habe ich auch geändert, der code zum verarbeiten der Fall, wo ein Attribut fehlte
Für die Vorteile, die die nächste person, hier ist meine Letzte Lösung
}
InformationsquelleAutor der Antwort Steve Pinfold
Nun, es produziert Fehler in diesem Fall 1 "Entspricht"
wenn er die gleiche Rendite enum-name statt Namen anzeigen, weil
enumMember.GetCustomAttribute()
wird null, wenn die displayname-und enum-Namen sind die gleichen.....
InformationsquelleAutor der Antwort Mohit Dhawan
Alternativ können Sie das folgende tun:
Bekommen und die Beschreibung mit den folgenden:
Meiner Meinung nach ist dies ein effizienter Weg, das zu tun, was Sie erreichen möchten, keine Reflexion erforderlich.
InformationsquelleAutor der Antwort Ian P
Jungs, wenn es hilft, werde ich mit Ihnen teilen meine Lösung:
Definition von Benutzerdefinierten Attribut:
Nun denn ich brauchte es in HtmlHelper definition von HtmlHelper-Erweiterung:
Hoffe es hilft
InformationsquelleAutor der Antwort g0rski
Können Sie auch definieren ein enum-Wert wie
Name_Without_Spaces
und wenn Sie möchten eine BeschreibungName_Without_Spaces.ToString().Replace('_', ' ')
ersetzt die Unterstriche durch Leerzeichen.InformationsquelleAutor der Antwort Coda