2 modi per convertire/casttare int in enum in C#
Ci sono 2 modi per convertire o lanciare int
in enum
in C#
- Utilizzando il casting di tipo esplicito in C#.
- Utilizzo del metodo
Enum.ToObject()
On this page
Soluzione 1: Utilizzo del casting di tipo esplicito in C#
Il modo più semplice per convertire int
in enum
in C# è utilizzare il casting di tipo esplicito.
Vediamo un esempio per capire meglio.
Abbiamo un enum
chiamato LogLevel
, che rappresenta diversi livelli di registrazione.
public enum LogLevel
{
ERROR=1,
WARN=2,
INFO=3,
DEBUG=4
}
int logEnumInteger = 1;
LogLevel errorEnum = (LogLevel) logEnumInteger;
Console.WriteLine(errorEnum.ToString());//ERROR
Il casting esplicito viene fatto mettendo il tipo enum
tra parentesi davanti al valore int
.
Ma c’è un problema con la precedente C# int
a enum
conversione.
Cosa succede se il valore int
non esiste nella variabile C# Enum
?
int logEnumInteger = 100;
LogLevel unknownEnum = (LogLevel) logEnumInteger;
Console.WriteLine(unknownEnum.ToString());//100
Non verrà lanciata alcuna eccezione.
Quindi è meglio controllare se il valore int
esiste in C# Enum
prima di lanciarlo in un intero.
Controllare se un intero esiste o meno in C# enum
variabile
Per ottenere tutti i valori interi in C# Enum
possiamo utilizzare il metodo Enum.GetValues
.
Convertirli in una lista C#
, in modo da poter utilizzare il metodo list.Contains()
per verificare se il dato intero esiste nella variabile enum
variabile.
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");
}
Possiamo usare il metodo Enum.IsDefined()
per verificare se il valore intero convertito esiste nel tipo dato enum
tipo.
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);
}
Soluzione 2: Utilizzare il metodo Enum.ToObject()
È possibile utilizzare il metodo C# Enum.ToObject()
, per convertire il valore int
in enum
in C#.
var enumValue = Enum.ToObject(typeof(LogLevel),1);
Console.WriteLine(enumValue);
//ERROR
Console.WriteLine(enumValue.GetType());
//LogLevel