2 būdai, kaip C# konvertuoti/atversti int į enum
Yra 2 būdai, kaip konvertuoti arba paversti int
į enum
c# kalba
- Naudojant C# aiškiai išreikštą tipų atvaizdavimą.
- Naudojant
Enum.ToObject()
metodą
On this page
1 sprendimas: naudojant C# aiškaus tipo atvaizdavimą
Paprastas būdas konvertuoti int
į enum
c# kalba - naudoti aiškų tipo atvaizdavimą.
Kad geriau jį suprastume, panagrinėkime pavyzdį.
Turime enum
tipą, pavadintą LogLevel
, kuris reiškia skirtingus registravimo lygius.
public enum LogLevel
{
ERROR=1,
WARN=2,
INFO=3,
DEBUG=4
}
int logEnumInteger = 1;
LogLevel errorEnum = (LogLevel) logEnumInteger;
Console.WriteLine(errorEnum.ToString());//ERROR
Aiškus atvaizdavimas atliekamas dedant enum
tipą skliausteliuose prieš int
reikšmę.
Tačiau yra problema, kai pirmiau C# int
į enum
konvertavimu.
Ką daryti, jei int
reikšmės nėra C# Enum
kintamajame?
int logEnumInteger = 100;
LogLevel unknownEnum = (LogLevel) logEnumInteger;
Console.WriteLine(unknownEnum.ToString());//100
Tai nesukels jokių išimčių.
Todėl prieš atmetant į sveikąjį skaičių geriau patikrinti, ar int
reikšmė egzistuoja C# Enum
.
Patikrinkite, ar sveikasis skaičius egzistuoja, ar ne C# enum
kintamajame
Norėdami gauti visas sveikųjų skaičių reikšmes C# Enum
, galime naudoti Enum.GetValues
metodą.
Konvertuokite jas į C#
sąrašą, kad galėtume list.Contains()
metodu patikrinti, ar duotas sveikasis skaičius egzistuoja enum
kintamajame.
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");
}
Galime naudoti Enum.IsDefined()
metodą, kad patikrintume, ar konvertuota sveikojo skaičiaus reikšmė egzistuoja duotame enum
tipą.
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);
}
2 sprendimas: naudokite Enum.ToObject()
metodą
Galime naudoti C# Enum.ToObject()
metodą, konvertuoti int
reikšmę į enum
c# kalba.
var enumValue = Enum.ToObject(typeof(LogLevel),1);
Console.WriteLine(enumValue);
//ERROR
Console.WriteLine(enumValue.GetType());
//LogLevel