Comparando Enum por String utilizando Generics
Bruno Kenj | ASP.NET
Salve desenvolvedores,
depois de um certo tempo sem postar nenhuma dica, segue mais essa.
Como fazer no código para validar um enumerador por uma string (caso suas chaves únicas int mudem)? Afinal, enumerador só espera os tipos: byte, sbyte, short, ushort, int, uint, long ou ulong. Podemos então criar um método genérico que vai receber o tipo do enumerador e a string, para depois fazermos a comparação.
Então, mãos à massa:
Criando o Enum:
/// <summary>
/// Enumerador para o Tipo de Alerta
/// </summary>
public enum TipoAlerta
{
/// <summary>
/// Resolver no Caso de Uso
/// </summary>
RUC,
/// <summary>
/// Resolver no Manter Alertas
/// </summary>
RMA,
/// <summary>
/// Ciente
/// </summary>
CIT,
/// <summary>
/// E-mail
/// </summary>
EMA
}
Criando o método para retornar o Enum:
/// <summary>
/// Método recebe string e retorna o Enum TipoAlerta conforme a string
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public T GetEnumByString<T>(string str)
{
return (T)Convert.ChangeType(Enum.Parse(typeof(T), str), typeof(T));
}
Lembrando que caso não ache esse Enum, será gerada uma exception. Se quiser, pode criar o Enum “NULL” e colocar nesse método um try/catch, e no catch, retornar o tipo “null”.
Fazendo o teste:
switch (GetEnumByString<TipoAlerta>("EMAA"))
{
case TipoAlerta.RUC:
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alerta", "alert('RUC');", true);
break;
case TipoAlerta.RMA:
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alerta", "alert('RMA');", true);
break;
}
o trabalho dentro de cada opção você quem faz. aqui eu só usei um exemplo de uma chamada assíncrona através do ASP.NET AJAX.
Em breve novos posts, inclusive do C# 3.0. Fiquem atentos!
abraços,