2 måder at konvertere/kaste int til enum i C#
Der er 2 måder At konvertere eller kaste int
til enum
i C#
- Ved hjælp af eksplicit type casting i C#.
- Brug af metoden
Enum.ToObject()
On this page
Løsning 1: Brug af C# eksplicit type casting
Den enkle måde at konvertere int
til enum
i C# er at bruge eksplicit type casting.
Lad os gennemgå et eksempel for at forstå det nærmere.
Vi har en enum
type kaldet LogLevel
, som repræsenterer forskellige niveauer af logning.
public enum LogLevel
{
ERROR=1,
WARN=2,
INFO=3,
DEBUG=4
}
int logEnumInteger = 1;
LogLevel errorEnum = (LogLevel) logEnumInteger;
Console.WriteLine(errorEnum.ToString());//ERROR
Eksplicit casting foretages ved at placere enum
type i parentes foran værdien int
.
Men der er et problem med ovenstående C# int
til enum
konvertering.
Hvad hvis int
-værdien ikke findes i C# Enum
-variablen?
int logEnumInteger = 100;
LogLevel unknownEnum = (LogLevel) logEnumInteger;
Console.WriteLine(unknownEnum.ToString());//100
Det vil ikke give nogen undtagelse.
Så det er bedre at kontrollere, om int
-værdien findes i C# Enum
, før den omformes til et heltal.
Kontroller, om der findes et heltal eller ej i C# enum
variabel
For at få alle de hele talværdier i C# Enum
kan vi bruge Enum.GetValues
-metoden.
Konverter dem til en liste på C#
, så vi kan bruge metoden list.Contains()
til at kontrollere, om det givne heltal findes i enum
variabel.
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");
}
Vi kan bruge Enum.IsDefined()
metoden til at kontrollere, om den konverterede hele talværdi findes i den givne enum
type.
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);
}
Løsning 2: Brug Enum.ToObject()
metoden
Vi kan bruge C# Enum.ToObject()
metoden, konvertere int
værdien til enum
i C#.
var enumValue = Enum.ToObject(typeof(LogLevel),1);
Console.WriteLine(enumValue);
//ERROR
Console.WriteLine(enumValue.GetType());
//LogLevel