2 ways to convert/cast int to enum in C#
Istnieją 2 sposoby Aby przekonwertować lub rzucić int
do enum
w C#
- Używając w C# jawnego rzutowania typów.
- Używanie metody
Enum.ToObject()
On this page
Rozwiązanie 1: Użycie rzutowania typu jawnego w C#
Prostym sposobem na konwersję int
do enum
w C# jest użycie jawnego rzutowania typów.
Przejdźmy przez przykład, aby zrozumieć to dalej.
Mamy enum
typ o nazwie LogLevel
, który reprezentuje różne poziomy logowania.
public enum LogLevel
{
ERROR=1,
WARN=2,
INFO=3,
DEBUG=4
}
int logEnumInteger = 1;
LogLevel errorEnum = (LogLevel) logEnumInteger;
Console.WriteLine(errorEnum.ToString());//ERROR
Wyraźne rzutowanie odbywa się poprzez umieszczenie enum
w nawiasach przed wartością int
.
Ale jest problem z powyższą C# int
to enum
konwersja.
Co zrobić, jeżeli wartość int
nie istnieje w zmiennej C# Enum
?
int logEnumInteger = 100;
LogLevel unknownEnum = (LogLevel) logEnumInteger;
Console.WriteLine(unknownEnum.ToString());//100
Nie będzie rzucał żadnego wyjątku.
Więc lepiej sprawdzić, czy wartość int
istnieje w C# Enum
przed rzuceniem go na liczbę całkowitą.
Sprawdź czy liczba całkowita istnieje czy nie w C# enum
zmiennej
Aby uzyskać wszystkie wartości całkowite w C# Enum
możemy użyć metody Enum.GetValues
.
Przekształć je na listę C#
, abyśmy mogli użyć metody list.Contains()
do sprawdzenia, czy dana liczba całkowita istnieje w enum
zmiennej.
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");
}
Możemy użyć metody Enum.IsDefined()
, aby sprawdzić, czy przekonwertowana wartość całkowita istnieje w danym enum
typu.
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);
}
Rozwiązanie 2: Użyj metody Enum.ToObject()
Możemy użyć metody C# Enum.ToObject()
, aby przekonwertować wartość int
na enum
w C#.
var enumValue = Enum.ToObject(typeof(LogLevel),1);
Console.WriteLine(enumValue);
//ERROR
Console.WriteLine(enumValue.GetType());
//LogLevel