Récupérer valeur d'énumération basée sur XmlEnumAttribute valeur de nom
J'ai besoin d'une fonction Générique pour récupérer le nom ou la valeur d'une énumération basée sur l'XmlEnumAttribute propriété "Name" de l'enum. Par exemple, j'ai l'enum ci-dessous définies:
Public Enum Currency
<XmlEnum("00")> CDN = 1
<XmlEnum("01")> USA= 2
<XmlEnum("02")> EUR= 3
<XmlEnum("03")> JPN= 4
End Enum
La première Devise valeur d'enum est 1; enum nom est "CA"; et le XMLEnumAttribute Nom de la valeur de la propriété est "00".
Si j'ai de la valeur d'enum, je peux récupérer le XmlEnumAttribute valeur de "Nom" à l'aide de la suite de fonction générique:
Public Function GetXmlAttrNameFromEnumValue(Of T)(ByVal pEnumVal As T) As String
Dim type As Type = pEnumVal.GetType
Dim info As FieldInfo = type.GetField([Enum].GetName(GetType(T), pEnumVal))
Dim att As XmlEnumAttribute = CType(info.GetCustomAttributes(GetType(XmlEnumAttribute), False)(0), XmlEnumAttribute) 'If there is an xmlattribute defined, return the name
Return att.Name
End Function
Donc, en utilisant la fonction ci-dessus, je peux spécifier la Devise de type enum, passer une valeur de 1, et la valeur de retour sera "00".
Ce dont j'ai besoin est une fonction à remplir dans le cas contraire. Si j'ai le XmlEnumAttribute Nom de la valeur "00", j'ai besoin d'une fonction pour renvoyer une Monnaie enum avec une valeur de 1. Tout aussi utile serait une fonction qui retourne la enum nom "CDN". Je pourrais alors tout simplement à analyser cette pour obtenir la valeur d'enum.
Toute aide serait appréciée.
Vous devez vous connecter pour publier un commentaire.
Un besoin de résoudre ce même problème m'a conduit à cette question et la réponse. Comme je l'ai développer dans VB.NET, j'ai réécrit CkH de la solution en VB et l'a modifié pour utiliser votre
GetXmlAttrNameFromEnumValue
fonction.C# Version:
where T : struct
comme une contrainte à laGetCode<T>
-méthode, depuis un enum ne sera jamais un type de référence en ce qui concerne mes connaissances en va. (Les structures autres que les énumérations sera en mesure de passer à travers, mais c'est quand même une belle petite amélioration à mon humble avis)- Je faire quelque chose de similaire avec les attributs personnalisés et j'ai utiliser cette méthode pour obtenir le EnumValue basé sur la Valeur de l'Attribut. GetStringValue est ma méthode personnalisée, similaire à l'exemple ci-dessus.
Pour l'ensemble du processus, j'case à cocher utiliser ce post et les réponses: L'Extension Des Enums, Overkill?
Désolé c'est en C#, vient de réaliser que vous avez été en utilisant VB.NET ci-dessus.
Légèrement modifié à partir de:
http://www.wackylabs.net/2006/06/getting-the-xmlenumattribute-value-for-an-enum-field/
Voici une variante qui génère un dictionnaire de l'enum, permettant éventuellement de mettre en cache le reflet d'une partie d'elle si vous avez besoin de l'utiliser beaucoup.
utilisation:
@Dean, @Jason et @ce que camron, je vous remercie pour vos solutions. Vos solutions m'a aidé à résoudre mon problème, où, en raison d'une XmlEnumAttribute nom, la réelle valeur d'enum était nécessaire.
Ma variante est mentionné ici.
Je suis également compris ici comme demandé par l'un de nos modérateurs:
Le réel problème était de savoir comment obtenir Item10, quand on donne une valeur de 10. S'inspirant de la solution citée par notre mentionnés ci-dessus les amis, je suis venu avec la méthode suivante, qui lorsqu'il est passé d'une valeur contenue dans XmlEnumAttribute, serait de retour la valeur d'enum: