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;
}
}