2 způsoby převodu/cast int na enum v jazyce C#
Existují 2 způsoby převodu nebo obsazení int
na enum
v jazyce C#
- Pomocí explicitního odlitku typu v jazyce C#.
- Použití metody
Enum.ToObject()
On this page
Řešení 1: Použití explicitního přiřazení typu v jazyce C#
Jednoduchý způsob, jak převést int
na enum
v jazyce C# je použití explicitního typování.
Projděme si příklad, abychom jej blíže pochopili.
Máme enum
typ nazvaný LogLevel
, který představuje různé úrovně protokolování.
public enum LogLevel
{
ERROR=1,
WARN=2,
INFO=3,
DEBUG=4
}
int logEnumInteger = 1;
LogLevel errorEnum = (LogLevel) logEnumInteger;
Console.WriteLine(errorEnum.ToString());//ERROR
Explicitní obsazení se provádí umístěním příznaku enum
typu v závorce před hodnotou int
.
Existuje však problém s výše uvedeným C# int
na enum
převodu.
Co když hodnota int
v proměnné C# Enum
neexistuje?
int logEnumInteger = 100;
LogLevel unknownEnum = (LogLevel) logEnumInteger;
Console.WriteLine(unknownEnum.ToString());//100
Nevyhodí to žádnou výjimku.
Proto je lepší před převedením na celé číslo zkontrolovat, zda hodnota int
existuje v C# Enum
.
Zkontrolujte, zda celé číslo existuje nebo ne v C# enum
proměnné
Pro získání všech celočíselných hodnot v proměnné C# Enum
můžeme použít metodu Enum.GetValues
.
Převedeme je na seznam C#
, abychom mohli pomocí metody list.Contains()
zkontrolovat, zda dané celé číslo existuje v daném seznamu enum
proměnné.
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");
}
Můžeme použít metodu Enum.IsDefined()
, abychom zkontrolovali, zda převedená celočíselná hodnota existuje v daném enum
typu.
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);
}
Řešení 2: Použijte metodu Enum.ToObject()
Můžeme použít metodu C# Enum.ToObject()
a převést hodnotu int
na hodnotu enum
v jazyce C#.
var enumValue = Enum.ToObject(typeof(LogLevel),1);
Console.WriteLine(enumValue);
//ERROR
Console.WriteLine(enumValue.GetType());
//LogLevel