Fuera de toda duda estan las ventajas de utilizar enumerados en nuestro código, pero en ocasiones es necesario asociar el valor del enumerado con una cadena, en .Net no se permiten enumerados con valores númericos pero... hace tiempo encontre una solución que ahroa voy a presentar.
///
/// Se crea una clase que hereada de Attribute
/// esta clase almacenara el string con el valor
/// del enumerado
///
public class StringValueAttribute : Attribute {
#region Properties
///
/// Holds the stringvalue for a value in an enum.
///
public string StringValue { get; protected set; }
#endregion
#region Constructor
///
/// Constructor used to init a StringValue Attribute
///
///
public StringValueAttribute(string value) {
this.StringValue = value;
}
#endregion
}
Ahora es necesario crear un
Método de extension para poder obtener el string asociado al valor del enumerado.
///
/// Se obtiene la cadena asociada
/// a un valor concreto del enumerado,esto solo funciona
/// si se ha asignado previamente un valor al atributo StringValue
///
///
///
public static string GetStringValue(this Enum value) {
// Get the type
Type type = value.GetType();
// Get fieldinfo for this type
FieldInfo fieldInfo = type.GetField(value.ToString());
// Get the stringvalue attributes
StringValueAttribute[] attribs = fieldInfo.GetCustomAttributes(
typeof(StringValueAttribute), false) as StringValueAttribute[];
// Return the first if there was a match.
return attribs.Length > 0 ? attribs[0].StringValue : null;
}
Ahora vemos como crear un enumerado
public enum MyEnum: int {
[StringValue("Lun")]
Lunes= 1,
[StringValue("Mar")]
Martes = 2
}
Como parte final vemos como usar nuestro enumerado.
MyEnum myE = MyEnum.Lunes;
string val = myE.GetStringValue();
1 comentario:
Hola,
yo he probado esto y no me funciona.
¿podrías poner un ejemplo completo de contexto para ver su uso?
Publicar un comentario