segunda-feira, 14 de junho de 2010

enum em c#, asp.net

Trabalhando com objectos do tipo enum.

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(string name)
{
return (T)Enum.Parse(typeof(T), name);
}

Color c = StringToEnum("Red");

public enum DaysOfWeek
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}

DaysOfWeek d = StringToEnum("Monday");


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(string name)
{
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: