2 maneras de convertir/cast int a enum en C#
Hay 2 maneras Para convertir o cast int
a enum
en C#
- Usando la conversión explícita de tipos en C#.
- Usando el método
Enum.ToObject()
On this page
Solución 1: Usando el casting de tipos explícito de C#
La forma más sencilla de convertir int
a enum
en C# es utilizar la conversión explícita de tipos.
Veamos un ejemplo para entenderlo mejor.
Tenemos un tipo enum
llamado LogLevel
, que representa diferentes niveles de registro.
public enum LogLevel
{
ERROR=1,
WARN=2,
INFO=3,
DEBUG=4
}
int logEnumInteger = 1;
LogLevel errorEnum = (LogLevel) logEnumInteger;
Console.WriteLine(errorEnum.ToString());//ERROR
El reparto explícito se realiza colocando el tipo enum
entre paréntesis delante del valor int
.
Pero hay un problema con el anterior C# int
a enum
conversión.
¿Qué pasa si el valor int
no existe en la variable C# Enum
?
int logEnumInteger = 100;
LogLevel unknownEnum = (LogLevel) logEnumInteger;
Console.WriteLine(unknownEnum.ToString());//100
No se lanzará ninguna excepción.
Así que es mejor comprobar si el valor int
existe en C# Enum
antes de convertirlo en un entero.
Comprueba si existe o no un entero en C# enum
variable
Para obtener todos los valores enteros en C# Enum
podemos utilizar el método Enum.GetValues
.
Convertirlos a la lista C#
, para que podamos utilizar el método list.Contains()
para comprobar si el entero dado existe en enum
en la variable.
var intValue = 100;
var enumValues = Enum.GetValues(typeof(LogLevel)).Cast<int>().ToList();
if(enumValues.Contains(intValue)){
Console.WriteLine("We can Cast C# int to Enum");
LogLevel loggingValue = (LogLevel) intValue;
}else{
Console.WriteLine("Cannot Cast C# int to Enum");
}
Podemos usar el método Enum.IsDefined()
para comprobar si el valor entero convertido existe en el tipo dado enum
dado.
var enumValue = (LogLevel)1;
if (Enum.IsDefined(typeof(LogLevel), enumValue)){
Console.WriteLine("The converted int to enum value is",enumValue);
}else{
Console.WriteLine("Cannot Convert int to Enum",enumValue);
}
Solución 2: Utilice el método Enum.ToObject()
Podemos utilizar el método C# Enum.ToObject()
, convertir el valor de int
a enum
en C#.
var enumValue = Enum.ToObject(typeof(LogLevel),1);
Console.WriteLine(enumValue);
//ERROR
Console.WriteLine(enumValue.GetType());
//LogLevel