Podemos ter o interesse de converter uma string para o nosso tipo enum.
Como podemos ver no exemplo a seguir usamos o Parse como seria de esperar em tipos valor como Int32, Double,...
object Enum.Parse(System.Type enumType, string value, bool ignoreCase);So you can
enum Colour
{
Red,
Green,
Blue
}
Colour c = (Colour) Enum.Parse(typeof(Colour), "Red", true);
Console.WriteLine("Colour Value: {0}", c.ToString());
Podemos proteger o nosso código de forma a verificar se a cor existe, caso não exista o mais comum resultado é uma excepção. Assim fazemos um teste a ver se a cor está definida no enum.
string nonColour = "Isto Não é uma cor";
if (Enum.IsDefined(typeof(Colour), nonColour))
c = (Colour) Enum.Parse(typeof(Colour), nonColour, true);
else
MessageBox.Show("Uh oh!");
A forma a seguir é usando um metodo generico para devolver T, o tipo de enum que estamos a usar.
public static T StringToEnum
{
return (T)Enum.Parse(typeof(T), name);
}
Color c = StringToEnum
public enum DaysOfWeek
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}
DaysOfWeek d = StringToEnum
Como programadores que gostamos de proteger o nosso código de excepções que possam ocorrer, podemos ainda ter este metodo verificando se name está definido no enumerado.
public static T StringToEnum
{
if (Enum.IsDefined(typeof(T), name))
return (T)Enum.Parse(typeof(T), name);
else
MessageBox.Show("Uh oh!");
// no else fazemos qualquer coisa que faça sentido no nosso código
// pode ser mandar uma excepção de aplicação neste caso especifico...
}
Podemos ainda fazer uma extensão deste metodo para o objecto string se for muito usado.
Não testei este código mas já usei parecido, por isso não deve estar muito longe da realidade.
Sem comentários:
Enviar um comentário