如何在C#中把`int` 转换成`enum`

要在C#中把int 转换成enum ,明确地输入把enum 变量转换成整数。

SampleEnum sample = (SampleEnum)IntVariable;

On this page

##解决方案1:使用enum 变量的显式类型转换

让我们通过一个例子来进一步了解它。

我们有一个名为Daysenum 类型,它表示从星期一开始的工作日。

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

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

但是,上述**intenum 的转换有一个问题**。

如果int 的值不存在于C#的Enum 变量中,怎么办?

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

它不会抛出任何异常。

Enum 因此,在将其转换为整数之前,最好先检查int 中是否存在该值。

检查enum 变量中是否存在一个整数

为了获得C#Enum 中的所有整数值,我们可以使用Enum.GetValues 方法。

将它们转换成C#列表,这样我们就可以使用list.Contains() 方法来检查给定的整数是否存在于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");
}

我们可以使用Enum.IsDefined() 方法来检查转换后的整数值是否存在于给定的enum 类型中。

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

##解决方案2:使用Enum.ToObject() 方法

我们可以使用Enum.ToObject() 方法,在C#中把int 值转换为enum

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

Console.WriteLine(enumValue);

//Tuesday

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