2 načina za pretvorbo/cast int v enum v jeziku C#
Obstajata 2 načina za pretvorbo ali kastiranje int
v enum
v jeziku C#
- Z uporabo eksplicitnega ujemanja tipov v jeziku C#.
- Uporaba metode
Enum.ToObject()
On this page
Rešitev 1: Uporaba eksplicitnega uvajanja tipov v jeziku C#
Preprost način za pretvorbo int
v enum
v jeziku C# je uporaba eksplicitnega ujemanja tipov.
Za boljše razumevanje si oglejmo primer.
Imamo enum
tip, imenovan LogLevel
, ki predstavlja različne ravni beleženja.
public enum LogLevel
{
ERROR=1,
WARN=2,
INFO=3,
DEBUG=4
}
int logEnumInteger = 1;
LogLevel errorEnum = (LogLevel) logEnumInteger;
Console.WriteLine(errorEnum.ToString());//ERROR
Izrecno ujemanje se izvede tako, da se postavi enum
tipa v oklepaju pred vrednostjo int
.
Vendar pa obstaja težava z zgornjim C# int
na enum
pretvorbo.
Kaj če vrednost int
ne obstaja v spremenljivki C# Enum
?
int logEnumInteger = 100;
LogLevel unknownEnum = (LogLevel) logEnumInteger;
Console.WriteLine(unknownEnum.ToString());//100
Ne bo vrgel nobene izjeme.
Zato je bolje preveriti, ali vrednost int
obstaja v C# Enum
, preden jo pretvorimo v celo število.
Preverite, ali celo število obstaja ali ne v C# enum
spremenljivki
Za pridobitev vseh celoštevilskih vrednosti v spremenljivki C# Enum
lahko uporabimo metodo Enum.GetValues
.
Pretvorimo jih v seznam C#
, tako da lahko z metodo list.Contains()
preverimo, ali dano celo število obstaja v enum
spremenljivki.
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");
}
Uporabimo lahko metodo Enum.IsDefined()
, da preverimo, ali pretvorjena celoštevilska vrednost obstaja v danem enum
tipu.
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);
}
Rešitev 2: Uporabite metodo Enum.ToObject()
Uporabimo lahko metodo C# Enum.ToObject()
in pretvorimo vrednost int
v enum
v jeziku C#.
var enumValue = Enum.ToObject(typeof(LogLevel),1);
Console.WriteLine(enumValue);
//ERROR
Console.WriteLine(enumValue.GetType());
//LogLevel