Utilizando Enum.Parse e Generics

Salve desenvolvedores,

em certos momentos, precisamos comparar strings com enumeradores, e como fazer isso de forma simples?

Já vi a prática de um método com switch validando texto a texto e retornando o enum esperado. Realmente isso não é prático.

Vamos criar um novo método genérico recebendo o texto e retornando o enumerador, caso passe pela validação. Crie uma classe chamada Parse, dentro do App_Code, e adicione o seguinte código:

public enum Telefone
{
Fixo,
Celular,
Trabalho
}

public static T ParseEnum(string texto)
{
if (!typeof(T).IsEnum)
throw new ArgumentException(typeof(T).ToString() + ” não é Enum”);
else
if (!Enum.IsDefined(typeof(T), texto))
throw new ArgumentException(String.Format(”O valor informado (\”{0}\”) não está definido no Enum {1}.”, texto, typeof(T)));

T t = (T)Enum.Parse(typeof(T), texto);
return t;
}

Pronto, agora para testar, vá na página ASP.NET e adicione o código:

Parse.Telefone enumObj = Parse.ParseEnum<Parse.Telefone>(”Trabalho”);
Response.Write(enumObj);

O retorno é: Trabalho.

Ficar atento ao Case Sensitive da string informada. O método Parse do Enum recebe um terceiro parametro bool ignoreCase, porém, é necessário tirar a validação Enum.IsDefined antes. Ao copiar e colar o código, colocar a identação correta, para não ter problemas nos if´s

Outra boa dica do Márcio Jenner.

abraços,

Enviar por e-mail. Hits para esta publicação: 418.

Deixe um Comentário