por Cesar Cassiano Schimanco

Cast, Parse e TryParse de Enum - C#

Para quem não conhece, o enum é basicamente um conjunto de constantes que formam uma lista enumerada, que tem a grande vantagem de ser identificada pelo IntelliSense do Visual Studio.

Abaixo vou mostrar alguns exemplos de Cast, Parse e TryParse de enum. E também um exemplo de switch com enum. Pois apesar do Enum ter suas vantagens, algumas vezes é um pouco complicado utilizá-lo em alguns contextos, principalmente nas comparações de Enums com outros tipos de dados.
Imagine um switch ou um if, por exemplo, onde a entrada de dados não é necessariamente um enum e sim uma string, como ficaria (enum == string)?

 

Enum utilizado nos exemplos:

public enum Cor
{
    Nula, // = 0
    Azul, // = 1
    Amarelo, // = 2
    Vermelho // = 3  
}

 

Utilizar enum em condições

//utilizar enum em condições (exemplo 1)
if (Enum.GetName(typeof(Cor), Cor.Azul) == "Azul")
{
    //Vai entrar nesta condição
}
//utilizar enum em condições (exemplo 2)
if (Cor.Azul.ToString() == "Azul")
{
    //Vai entrar nesta condição
}

 

Fazer Cast de enum
Por padrão, o valor de um enum é seu indice (Nula = 0, Azul = 1, Amarelo = 2 e Vermelho = 3 ). Então podemos fazer o Cast conforme o exemplo abaixo.

//Cast de enum
if (Cor.Azul == (Cor)1)
{
    //Vai entrar nesta condição
}

 

Fazer Parse de enum

//Fazer Parse de enum
//Enum.Parse(type, valor, ignoreCase)
//Você pode utilizar o ignoreCase, assim ele não vai diferenciar caixa alta e baixa
Cor cor = (Cor)Enum.Parse(typeof(Cor), "azul", true);

if(cor == Cor.Azul)
{
    //Vai entrar nesta condição
}

 

TryParse de enum

//TryParse de enum
Cor cor;
Enum.TryParse<Cor>("amarelo", true, out cor);

 

Verificar se string é um enum

//Verificar se string é um enum
Cor cor;
if (Enum.TryParse<Cor>("amarelo", true, out cor))
{
    //é um enum
}

//Verificar se é um enum (exemplo 2)
    //Observe que o IsDefined é case sensitive
if (Enum.IsDefined(typeof(Cor), "Vermelho"))
{
    //é um enum
}

 

Switch case com enum

//switch case com enum
Cor cor;

//Verificar se é um enum
if (Enum.TryParse<Cor>("vermelho", true, out cor))
{
    //Se for um enum já faz o parse para cor4
    switch (cor)
    {
        case Cor.Nula:
            break;
        case Cor.Azul:
            break;
        case Cor.Amarelo:
            break;
        case Cor.Vermelho:
            //vai entrar aqui
            break;
        default:
            break;
    }
}

 

Comentários

Carregando comentários

Postar um novo comentário



Processando...