在C#中,有2种方法可以将int转换/cast到enum

有2种方法可以将int 转换为 enum在C#中

1.使用C#显式类型转换。 2.使用Enum.ToObject() 方法

On this page

解决方案1:使用C#显式类型铸造

int 转换为 enum的简单方法是使用显式类型转换。

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

我们有一个 enum类型叫做LogLevel ,它代表不同级别的日志。

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

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

明确的铸造是通过将 enum类型放在int 值前面的括号里。

但是上述C#int的转换有一个问题。 enum转换**。

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

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

它不会抛出任何异常。

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

检查一个整数是否存在于 C# enum变量

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

将它们转换成C# 列表,这样我们就可以使用list.Contains() 方法来检查给定的整数是否存在于 enum变量中。

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

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

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

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

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

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

Console.WriteLine(enumValue);

//ERROR

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