2 módja az int konvertálásának/castolásának a enum címre a C#-ban

2 módja van a int konvertálásának vagy castolásának enum c# nyelven

  1. A C# explicit típusöntés használata.
  2. A Enum.ToObject() módszer használata

On this page

Megoldás 1: C# explicit type casting használata

A int egyszerű módon konvertálható enum c# nyelven az explicit típusváltás használata.

Nézzünk végig egy példát, hogy jobban megértsük.

Van egy enum``LogLevel nevű típusunk, amely a naplózás különböző szintjeit reprezentálja.

public enum LogLevel
{
   ERROR=1, 
   WARN=2, 
   INFO=3, 
   DEBUG=4
}

int logEnumInteger = 1;
LogLevel errorEnum = (LogLevel) logEnumInteger;
Console.WriteLine(errorEnum.ToString());//ERROR

Az explicit casting a enum típus zárójelben a int érték elé kerül.

De van egy probléma a fenti C# int to enum átalakítás.

Mi van akkor, ha a int érték nem létezik a C# Enum változóban?

int logEnumInteger = 100;
LogLevel unknownEnum = (LogLevel) logEnumInteger;
Console.WriteLine(unknownEnum.ToString());//100

Nem dob semmilyen kivételt.

Tehát jobb, ha ellenőrizzük, hogy a int érték létezik-e a C# Enum címen, mielőtt egész számra öntjük.

Ellenőrizze, hogy egy egész szám létezik-e vagy sem a C# enum változóban

A C# Enum összes egész szám értékének kinyeréséhez használhatjuk a Enum.GetValues módszert.

Konvertáljuk őket a C# listába, hogy a list.Contains() módszerrel ellenőrizni tudjuk, hogy az adott egész szám létezik-e a változóban enum változóban.

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");
}

A Enum.IsDefined() módszerrel ellenőrizhetjük, hogy a konvertált egész érték létezik-e az adott változóban enum típusban.

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);
}

Megoldás 2: Használja a Enum.ToObject() módszert

Használhatjuk a C# Enum.ToObject() módszert, a int értéket konvertálhatjuk a következőre enum c# nyelven.

var enumValue = Enum.ToObject(typeof(LogLevel),1);

Console.WriteLine(enumValue);

//ERROR

Console.WriteLine(enumValue.GetType());
//LogLevel