Como lançar `int` para `enum` em C#


Para lançar int a enum em C#, digite explicitamente a variável enum para inteirar.

SampleEnum sample = (SampleEnum)IntVariable;

Table of Contents

Solução 1: Usando fundição de tipo explícito de enum variável

Vamos passar por um exemplo para entendê-lo melhor.

Temos um tipo enum chamado Days, que representa os dias da semana a partir de segunda-feira.

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

int dayInteger = 6;
Days day = (Days) dayInteger;
Console.WriteLine(day.ToString());//Monday

Mas há um problema com int a enum conversão*.

E se o valor int não existir na variável C# Enum?

int dayInteger = 100;
Days day = (Days) dayInteger;
Console.WriteLine(day.ToString());//100

Ele não abrirá nenhuma exceção.

Portanto, é melhor verificar se o valor int existe em Enum antes de lançá-lo ao número inteiro.

Verifique se existe ou não um número inteiro na variável enum

Para obter todos os valores inteiros em C# Enum, podemos usar o método Enum.GetValues.

Convertê-los para a lista C#, para que possamos usar o método list.Contains() para verificar se o número inteiro dado existe na variável enum.

var intValue = 100;
var enumValues = Enum.GetValues(typeof(Days)).Cast<int>().ToList();

if(enumValues.Contains(intValue)){
  Console.WriteLine("We can Cast int to Enum");  
   Days day = (Days) intValue;
}else{
  Console.WriteLine("Cannot Cast int to Enum");
}

Podemos usar o método Enum.IsDefined() para verificar se o valor inteiro convertido existe no tipo enum dado.

var enumValue = (Days)1;

if (Enum.IsDefined(typeof(Days), enumValue)){
   Console.WriteLine("The converted int to enum value is",enumValue);
}else{
   Console.WriteLine("Cannot Convert int to Enum",enumValue);
}

Solução 2: Usar o método Enum.ToObject()

Podemos usar o método Enum.ToObject(), converter o valor int para enum em C#.

var enumValue = Enum.ToObject(typeof(Days),1);

Console.WriteLine(enumValue);

//Tuesday

Console.WriteLine(enumValue.GetType());
//Days

Avatar
Arunkumar Gudelli

I am One among a million Software engineers of India. I write beautiful markup.I make the Web useful.

Next
Previous