2 spôsoby konverzie/prevodu int na enum v jazyku C#
Existujú 2 spôsoby konverzie alebo obsadenia int
na enum
v jazyku C#
- Pomocou explicitného typového zápisu v jazyku C#.
- Použitie metódy
Enum.ToObject()
On this page
Riešenie 1: Použitie explicitného typového kastingu jazyka C#
Jednoduchý spôsob konverzie int
na enum
v jazyku C# je použitie explicitného typového kastingu.
Prejdime si príklad, aby sme ho lepšie pochopili.
Máme enum
typ s názvom LogLevel
, ktorý predstavuje rôzne úrovne protokolovania.
public enum LogLevel
{
ERROR=1,
WARN=2,
INFO=3,
DEBUG=4
}
int logEnumInteger = 1;
LogLevel errorEnum = (LogLevel) logEnumInteger;
Console.WriteLine(errorEnum.ToString());//ERROR
Explicitné obsadzovanie sa vykonáva umiestnením príkazu enum
typu v zátvorkách pred hodnotou int
.
Existuje však problém s vyššie uvedeným C# int
na enum
konverzii.
Čo ak hodnota int
v premennej C# Enum
neexistuje?
int logEnumInteger = 100;
LogLevel unknownEnum = (LogLevel) logEnumInteger;
Console.WriteLine(unknownEnum.ToString());//100
Nevyhodí to žiadnu výnimku.
Preto je lepšie skontrolovať, či hodnota int
existuje v C# Enum
, skôr než ju prevediete na celé číslo.
Skontrolujte, či celé číslo existuje alebo nie v C# enum
premennej
Na získanie všetkých celočíselných hodnôt v premennej C# Enum
môžeme použiť metódu Enum.GetValues
.
Prevedieme ich na zoznam C#
, aby sme mohli pomocou metódy list.Contains()
skontrolovať, či dané celé číslo existuje v enum
premennej.
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");
}
Metódu Enum.IsDefined()
môžeme použiť na kontrolu, či konvertovaná celočíselná hodnota existuje v danej enum
type.
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);
}
Riešenie 2: Použite metódu Enum.ToObject()
Môžeme použiť metódu C# Enum.ToObject()
, previesť hodnotu int
na enum
v jazyku C#.
var enumValue = Enum.ToObject(typeof(LogLevel),1);
Console.WriteLine(enumValue);
//ERROR
Console.WriteLine(enumValue.GetType());
//LogLevel