2 tapaa muuntaa/castata int muotoon enum in C#
On 2 tapaa muuntaa tai valaa int muotoon enum c#:ssa
- Käyttämällä C#:n eksplisiittistä tyyppivalintaa.
Enum.ToObject()-menetelmän käyttäminen
On this page
Ratkaisu 1: C#:n eksplisiittisen tyypinvalinnan käyttäminen
Yksinkertainen tapa muuntaa int muotoon enum c#-kielellä on käyttää eksplisiittistä tyypinvalintaa.
Käydään läpi esimerkki sen ymmärtämiseksi tarkemmin.
Meillä on enum tyyppi nimeltään LogLevel, joka edustaa eri kirjaustasoja.
public enum LogLevel
{
ERROR=1,
WARN=2,
INFO=3,
DEBUG=4
}
int logEnumInteger = 1;
LogLevel errorEnum = (LogLevel) logEnumInteger;
Console.WriteLine(errorEnum.ToString());//ERROR
Eksplisiittinen valu tehdään sijoittamalla enum tyyppi sulkeisiin int arvon eteen.
Mutta on olemassa ongelma, kun edellä C# int to enum muuntamisessa.
Entä jos int -arvoa ei ole olemassa C# Enum -muuttujassa?
int logEnumInteger = 100;
LogLevel unknownEnum = (LogLevel) logEnumInteger;
Console.WriteLine(unknownEnum.ToString());//100
Se ei aiheuta poikkeusta.
On siis parempi tarkistaa, onko int -arvo olemassa osoitteessa C# Enum, ennen kuin se valetaan kokonaisluvuksi.
Tarkista, onko kokonaisluku olemassa vai ei C# enum muuttujassa
Saadaksemme kaikki kokonaislukuarvot muuttujasta C# Enum voimme käyttää Enum.GetValues -menetelmää.
Muunnetaan ne C# -luetteloksi, jotta voimme käyttää list.Contains() -menetelmää tarkistaaksemme, onko annettu kokonaisluku olemassa muuttujassa enum muuttuja.
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");
}
Voimme käyttää Enum.IsDefined() -menetelmää tarkistaaksemme, onko muunnettu kokonaislukuarvo olemassa annetussa muuttujassa enum tyyppi.
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);
}
Ratkaisu 2: Käytä Enum.ToObject() -menetelmää
Voimme käyttää C# Enum.ToObject() -menetelmää, muuntaa int arvon muotoon enum c#-kielellä.
var enumValue = Enum.ToObject(typeof(LogLevel),1);
Console.WriteLine(enumValue);
//ERROR
Console.WriteLine(enumValue.GetType());
//LogLevel