Kako v jeziku C# pretvoriti `int` v `enum`
Če želite v jeziku C# pretvoriti spremenljivko int
v enum
, izrecno vpišite cast spremenljivke enum
v celo število.
SampleEnum sample = (SampleEnum)IntVariable;
Table of Contents
Rešitev 1: Uporaba eksplicitnega uvajanja tipa spremenljivke enum
Za boljše razumevanje si oglejmo primer.
Imamo tip enum
z imenom Days
, ki predstavlja dneve v tednu, začenši s ponedeljkom.
public enum Days
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}
int dayInteger = 6;
Days day = (Days) dayInteger;
Console.WriteLine(day.ToString());//Monday
Vendar se pojavi težava pri zgornji pretvorbi **int
v enum
**.
Kaj če vrednost int
ne obstaja v spremenljivki C# Enum
?
int dayInteger = 100;
Days day = (Days) dayInteger;
Console.WriteLine(day.ToString());//100
Ne bo vrgel nobene izjeme.
Zato je bolje preveriti, ali vrednost int
obstaja v Enum
, preden jo pretvorimo v celo število.
Preverite, ali v spremenljivki enum
obstaja celo število ali ne
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 spremenljivki enum
.
var intValue = 100;
var enumValues = Enum.GetValues(typeof(Days)).Cast<int>().ToList();
if(enumValues.Contains(intValue)){
Console.WriteLine("We can Cast int to Enum");
Days day = (Days) intValue;
}else{
Console.WriteLine("Cannot Cast int to Enum");
}
Uporabimo lahko metodo Enum.IsDefined()
, da preverimo, ali pretvorjena celoštevilska vrednost obstaja v danem tipu enum
.
var enumValue = (Days)1;
if (Enum.IsDefined(typeof(Days), 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 Enum.ToObject()
, s katero pretvorimo vrednost int
v enum
v jeziku C#.
var enumValue = Enum.ToObject(typeof(Days),1);
Console.WriteLine(enumValue);
//Tuesday
Console.WriteLine(enumValue.GetType());
//Days