Cómo convertir `int` en `enum` en C#


Para convertir int en enum en C#, escriba explícitamente la variable enum en un número entero.

SampleEnum sample = (SampleEnum)IntVariable;

Índice

Solución 1: Usar el casting de tipo explícito de la variable enum

Veamos un ejemplo para entenderlo mejor.

Tenemos un tipo enum llamado Days, que representa los días de la semana a partir del lunes.

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

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

Pero hay un problema con la conversión deint a enum.

¿Qué pasa si el valor int no existe en la variable C# Enum?

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

No lanzará ninguna excepción.

Así que es mejor comprobar si el valor de int existe en Enum antes de convertirlo en un entero.

Comprobar si un entero existe o no en la variable enum

Para obtener todos los valores enteros en C# Enum podemos utilizar el método Enum.GetValues.

Convertirlos en una lista de C#, de modo que podamos utilizar el método list.Contains() para comprobar si el entero dado existe en la variable 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 utilizar el método Enum.IsDefined() para comprobar si el valor entero convertido existe en el tipo dado enum.

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

Solución 2: Utilizar el método Enum.ToObject()

Podemos utilizar el método Enum.ToObject(), para convertir el valor de int en enum en 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.

Siguiente
Anterior