Hur man kastar `int` till `enum` i C#
Om du vill omvandla int
till enum
i C# ska du uttryckligen skriva casta variabeln enum
till heltal.
SampleEnum sample = (SampleEnum)IntVariable;
Innehållsförteckning
Lösning 1: Använd explicit typgjutning av enum
-variabeln
Låt oss gå igenom ett exempel för att förstå det bättre.
Vi har en enum
-typ som heter Days
, som representerar veckodagar som börjar med måndag.
public enum Days
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}
int dayInteger = 6;
Days day = (Days) dayInteger;
Console.WriteLine(day.ToString());//Monday
Men det finns ett problem med ovanstående **omvandling frånint
till enum
**.
Vad händer om värdet int
inte finns i variabeln Enum
i C#?
int dayInteger = 100;
Days day = (Days) dayInteger;
Console.WriteLine(day.ToString());//100
Det kommer inte att skapa något undantag.
Det är alltså bättre att kontrollera om värdet int
finns i Enum
innan det kastas till ett heltal.
Kontrollera om det finns ett heltal eller inte i variabeln enum
För att få fram alla heltalsvärden i C# Enum
kan vi använda metoden Enum.GetValues
.
Konvertera dem till en C#-lista så att vi kan använda list.Contains()
-metoden för att kontrollera om det givna heltalet finns i enum
-variabeln.
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");
}
Vi kan använda metoden Enum.IsDefined()
för att kontrollera om det konverterade heltalsvärdet finns i den givna typen 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);
}
Lösning 2: Använd Enum.ToObject()
-metoden
Vi kan använda metoden Enum.ToObject()
för att konvertera värdet int
till enum
i C#.
var enumValue = Enum.ToObject(typeof(Days),1);
Console.WriteLine(enumValue);
//Tuesday
Console.WriteLine(enumValue.GetType());
//Days