Muchas veces nos hemos topado durante el desarrollo de nuestros sistemas con la necesidad de usar enumeradores, y parte de esa necesidad (en ocaciones), esta la de convertir texto a un valor de enumerador y viceversa (principalemente cuando trabajamos con valores desde una base de datos o desde xml/json).
Pues bien, hacer esto es realmente facil y útil, comencemos una conversión de texto a un valor de un enumerador... usemos como ejemplo el siguiente enumerador:
public enum Sexo{
Masculino = 1,
Femenino=2
}
Supongamos que tenemos un método en donde recibimos como parámetro el texto "Femenino", el cual lo necesitamos convertir a un enumerador para poder guardar en la base de datos su valor numérico, luego entonces lo que debemos hacer es lo siguiente:
public Sexo DevuelveEnumerador(string sexo){
try{
return (Sexo) Enum.Parse(typeof(Sexo), sexo);
}catch{
throw new Exception($"No se puede convertir el valor {sexo} a un valor de tipo 'Sexo' válido (Masculino/Femenino).") ;
}
}
Podemos observar que en la linea del "return", se está realizando la conversión por medio de la clase "Enum" usando el método "Parse", el cual recibe como primer parámetro el tipo del enumerador al cual se realizará la conversión y como segundo parámetro el valor que se pretende convertir; ahora bien, la conversión puede dar como resultado un error si es que el valor que se pretende convertir no se encuetra entre los valores del enumerador, por lo cual usamos los operadores "try/catch" para capturar dicho error y (en este caso), regresar un nuevo error, pero con un mensaje mas entendible para el usuario.
Cuando lo que necesitamos es obtener el valor de un enumerador y convertirlo a texto, es mucho mas sencillo ya que solo necesitamos recurrir al metodo ToString:
public string DevuelveTexto(Sexo sexo) => sexo.ToString();En el ejemplo anterior vemos como el único contenido de nuestra función "DevuelveTexto" es precisamente "sexo.ToString()" lo cual (para este ejemplo) nos devovlerá el valor "Masculino" o "Femenino" de acuerdo al valor que tenga el parámetro recibido por la función.
Para finalizar, otra función muy útil que tenemos para éstas conversiones, es justamente al momento de converir un objeto a otro... es decir, ¿cuántas veces no nos hemos topado con la necesidad de cambiar el valor tipo de nuestro enumerador al tipo de otro enumerador con los mismos valores, pero que, como viene de otro sistema, nos vemos obligados a hacer las conversiones?, bueno, supongamos que estamos consumiendo una librería de terceros en la cual la documentación nos indica que existe el siguiente enumerador:
public enum Genero{
Masculino = 1,
Femenino = 2,
Otro = 3
}
En éste caso nosotros podríamos implementar el siguiente método:
public Genero CovertirSexoGenero(Sexo sexo, bool esOtro){
if(esOtro) return Genero.Otro;
return (Genero) Enum.Parse(typeof(Genero), sexo.ToString());
}
En este método vemos que recibimos 2 parámetros, el primero es un Enumerador del tipo "Sexo" (el cual es el que nosotros definimos), el segundo valor es un boleano que nos indica si el valor que devolveremos es el que no se encuentra en nuestro enumerador (Otro)... lo primero que hacemos es precisamente evaluar el booleano, donde, si este tiene un valor vardadero entonces nuestro método devoverá directamente el valor "Otro" pero en forma de enumerador de tipo "Genero", en caso de que sea falso entonces se realizarán 2 conversiones, en primer lugar vemos que estamos tratando de usar nuestra conversión de texto a enumerador dentro de la cual (como recordamos), tenemos que pasar un valor de tipo texto en el segundo parámetro, por lo tanto usarémos segunda conversión para pasar de enumerador a texto y con eso alimentar el parámetro necesario para la primera converisión.
No hay comentarios.:
Publicar un comentario