Cum se transformă `int` în `enum` în C#

Pentru a transforma int în enum în C#, scrieți explicit cast the enum variable to integer.

SampleEnum sample = (SampleEnum)IntVariable;

On this page

Soluția 1: Utilizarea distribuției explicite a tipului de variabilă enum

Să analizăm un exemplu pentru a înțelege mai bine.

Avem un tip enum numit Days, care reprezintă zilele săptămânii începând de luni.

public enum Days
{
        Monday,  
        Tuesday,  
        Wednesday,  
        Thursday,  
        Friday,  
        Saturday,  
        Sunday
}

int dayInteger = 6;
Days day = (Days) dayInteger;
Console.WriteLine(day.ToString());//Monday

Dar există o problemă cu conversia int în enum de mai sus.

Ce se întâmplă dacă valoarea int nu există în variabila C# Enum?

int dayInteger = 100;
Days day = (Days) dayInteger;
Console.WriteLine(day.ToString());//100

Nu se va arunca nicio excepție.

Așadar, este mai bine să verificați dacă valoarea int există în Enum înainte de a o transforma în număr întreg.

Verificați dacă există sau nu un număr întreg în variabila enum

Pentru a obține toate valorile întregi în C# Enum putem folosi metoda Enum.GetValues.

Conversia lor în listă C#, astfel încât să putem folosi metoda list.Contains() pentru a verifica dacă numărul întreg dat există în variabila enum.

var intValue = 100;
var enumValues = Enum.GetValues(typeof(Days)).Cast<int>().ToList();

if(enumValues.Contains(intValue)){
  Console.WriteLine("We can Cast int to Enum");  
   Days day = (Days) intValue;
}else{
  Console.WriteLine("Cannot Cast int to Enum");
}

Putem utiliza metoda Enum.IsDefined() pentru a verifica dacă valoarea întreagă convertită există în tipul enum dat.

var enumValue = (Days)1;

if (Enum.IsDefined(typeof(Days), enumValue)){
   Console.WriteLine("The converted int to enum value is",enumValue);
}else{
   Console.WriteLine("Cannot Convert int to Enum",enumValue);
}

Soluția 2: Utilizați metoda Enum.ToObject()

Putem utiliza metoda Enum.ToObject(), pentru a converti valoarea int în enum în C#.

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

Console.WriteLine(enumValue);

//Tuesday

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