Ceci est mon enum:
public enum DocumentTypes { [EnumMember] TYPE_1 = 1, [EnumMember] TYPE_2 = 2, [EnumMember] TYPE_3 = 3, [EnumMember] TYPE_4 = 4, [EnumMember] TYPE_5 = 5, [EnumMember] TYPE_6 = 6, [EnumMember] TYPE_7 = 7, [EnumMember] TYPE_8 = 12 }
Si je veux obtenir ‘TYPE_8’, si je n’ai que 12 ans, y a-t-il un moyen d’obtenir la valeur enum?
J’ai essayé ceci:
((DocumentTypes[])(Enum.GetValues(typeof(DocumentTypes))))[Convert.ToInt32("3")].ToSsortingng()
qui retourne une valeur de ‘TYPE_4’
ssortingng str = ""; int value = 12 if (Enum.IsDefined(typeof (DocumentTypes),value)) str = ((DocumentTypes) value).ToSsortingng(); else str = "Invalid Value";
Ceci donnera également la possibilité de gérer les valeurs non valides essayant d’être utilisées, sans exception interne.
Vous pouvez également remplacer la chaîne par DocumentTypes, c.-à-d.
DocumentTypes dt = DocumentTypes.Invalid; // Create an invalid enum if (Enum.IsDefined(typeof (DocumentTypes),value)) dt = (DocumentTypes) value;
Et pour le point bonus, voici comment append une chaîne personnalisée à une énumération (copiée à partir de cette réponse SO )
Enum DocumentType { [Description("My Document Type 1")] Type1 = 1, etc... }
Ajoutez ensuite une méthode d’extension quelque part
public static ssortingng GetDescription(this object enumerationValue) where T : struct { Type type = enumerationValue.GetType(); if (!type.IsEnum) throw new ArgumentException("EnumerationValue must be of Enum type", "enumerationValue"); //Tries to find a DescriptionAtsortingbute for a potential friendly name //for the enum MemberInfo[] memberInfo = type.GetMember(enumerationValue.ToSsortingng()); if (memberInfo != null && memberInfo.Length > 0) { object[] attrs = memberInfo[0].GetCustomAtsortingbutes(typeof (DescriptionAtsortingbute), false); if (attrs != null && attrs.Length > 0) { //Pull out the description value return ( (DescriptionAtsortingbute) attrs[0] ).Description; } } //If we have no description atsortingbute, just return the ToSsortingng of the enum return enumerationValue.ToSsortingng(); }
Ensuite, vous pouvez utiliser:
DocumentType dt = DocumentType.Type1; ssortingng str = dt.GetDescription();
Ce qui resortingve la valeur de l’atsortingbut Description.
Voici une nouvelle version de la méthode d’extension qui n’a pas besoin de connaître le type d’Enum à l’avance.
public static ssortingng GetDescription(this Enum value) { var type = value.GetType(); var memInfo = type.GetMember(value.ToSsortingng()); if (memInfo.Length > 0) { var attrs = memInfo[0].GetCustomAtsortingbutes(typeof(DescriptionAtsortingbute), false); if (attrs.Length > 0) return ((DescriptionAtsortingbute)attrs[0]).Description; } return value.ToSsortingng(); }
Vous pouvez le lancer directement:
int value = 12; DocumentTypes dt = (DocumentTypes)value;
Tout d’abord, lancez votre type enum et appelez ToSsortingng ():
ssortingng str = ((DocumentTypes)12).ToSsortingng();
Essaye ça:
énumération publique EnumTest { EnumOne, EnumTwo, EnumThree, Inconnu }; Classe publique EnumTestingClass { [STAThread] statique vide Main () { EnumTest tstEnum = EnumTest.Unknown; object objTestEnum; objTestEnum = Enum.Parse (tstEnum.GetType (), "EnumThree"); if (objTestEnum est EnumTest) { EnumTest newTestEnum = (EnumTest) objTestEnum; Console.WriteLine ("newTestEnum = {0}", newTestEnum.ToSsortingng ()); } } }
À partir de l’exemple de code, vous verrez que newTestEnum
aura la valeur de l’équivalent ‘EnumTest’ de la chaîne “EnumThree”.
J’espère que cela vous aidera, Cordialement, Tom.