2 sätt att konvertera/casta int till enum i C#
Det finns två sätt att konvertera eller kasta int
till enum
i C#
- Genom att använda explicit typcasting i C#.
- Användning av
Enum.ToObject()
-metoden
On this page
Lösning 1: Användning av explicit type casting i C#
Det enkla sättet att konvertera int
till enum
i C# är att använda explicit type casting.
Låt oss gå igenom ett exempel för att förstå det närmare.
Vi har en enum
typ som heter LogLevel
, som representerar olika nivåer av loggning.
public enum LogLevel
{
ERROR=1,
WARN=2,
INFO=3,
DEBUG=4
}
int logEnumInteger = 1;
LogLevel errorEnum = (LogLevel) logEnumInteger;
Console.WriteLine(errorEnum.ToString());//ERROR
Explicit casting görs genom att placera enum
typ inom parentes framför värdet int
.
Men det finns ett problem med ovanstående C# int
till enum
konvertering.
Vad händer om värdet int
inte finns i variabeln C# Enum
?
int logEnumInteger = 100;
LogLevel unknownEnum = (LogLevel) logEnumInteger;
Console.WriteLine(unknownEnum.ToString());//100
Det kommer inte att skapa något undantag.
Det är alltså bättre att kontrollera om värdet int
finns i C# Enum
innan det kastas till ett heltal.
Kontrollera om ett heltal finns eller inte i C# enum
variabeln
För att få fram alla heltalsvärden i C# Enum
kan vi använda metoden Enum.GetValues
.
Konvertera dem till listan C#
så att vi kan använda metoden list.Contains()
för att kontrollera om det givna heltalet finns i variabeln 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 använda metoden Enum.IsDefined()
för att kontrollera om det konverterade heltalsvärdet finns i den givna variabeln enum
typ.
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: Använd metoden Enum.ToObject()
Vi kan använda metoden C# Enum.ToObject()
och omvandla värdet int
till enum
i C#.
var enumValue = Enum.ToObject(typeof(LogLevel),1);
Console.WriteLine(enumValue);
//ERROR
Console.WriteLine(enumValue.GetType());
//LogLevel