que obtener español enum descripcion clase c# reflection

c# - obtener - Encontrar un valor enum por su atributo de descripción



que es enum (3)

Ok, después de tipear todo, creo que este es un caso de decisión al principio que me lleva por el camino equivocado. Enum parecía el camino correcto para empezar, ¡pero un simple Dictionary<string, int> será suficiente y será muchísimo más fácil trabajar con él!

Esta pregunta ya tiene una respuesta aquí:

Esto puede parecer un poco al revés, pero lo que quiero hacer es obtener un valor enum de una enumeración mediante su atributo Descripción.

Entonces, si tengo una enumeración declarada de la siguiente manera:

enum Testing { [Description("David Gouge")] Dave = 1, [Description("Peter Gouge")] Pete = 2, [Description("Marie Gouge")] Ree = 3 }

Me gustaría poder recuperar 2 al suministrar la cadena "Peter Gouge".

Como punto de partida, puedo iterar a través de los campos enum y tomar el campo con el atributo correcto:

string descriptionToMatch = "Peter Gouge"; FieldInfo[] fields = typeof(Testing).GetFields(); foreach (FieldInfo field in fields) { if (field.GetCustomAttributes(typeof(DescriptionAttribute), false).Count() > 0) { if (((DescriptionAttribute)field.GetCustomAttributes(typeof(DescriptionAttribute), false)[0]).Description == descriptionToMatch) { } } }

Pero luego estoy estancado en cuanto a qué hacer en ese interior si. También no estoy seguro de si este es el camino a seguir en primer lugar.


Usando el método de extensión descrito here :

Testing t = Enum.GetValues(typeof(Testing)) .Cast<Testing>() .FirstOrDefault(v => v.GetDescription() == descriptionToMatch);

Si no se encuentra ningún valor coincidente, devolverá (Testing)0 (es posible que desee definir un miembro None en su enumeración para este valor)


return field.GetRawConstantValue();

Por supuesto, podría devolverlo a Prueba si es necesario.