C# 中如何将 int 类型转换为枚举类型

C# 中如何将 int 类型转换为枚举类型

技术背景

在 C# 编程中,枚举(enum)是一种值类型,它允许为一组常数值分配一个名称。有时,我们需要将整数类型(int)的值转换为枚举类型,以便更好地利用枚举的语义和类型安全。例如,从数据库或用户输入中获取整数值,然后将其映射到相应的枚举成员。

实现步骤

从 int 类型转换

直接使用强制类型转换:

1
YourEnum foo = (YourEnum)yourInt;

从 string 类型转换

使用 Enum.Parse 方法:

1
2
3
4
5
6
7
8
YourEnum foo = (YourEnum) Enum.Parse(typeof(YourEnum), yourString);
// 对于标记了 [Flags] 属性的枚举,需要检查 foo.ToString().Contains(",")
if (!Enum.IsDefined(typeof(YourEnum), foo) && !foo.ToString().Contains(","))
{
throw new InvalidOperationException(
$"{yourString} is not an underlying value of the YourEnum enumeration."
);
}

动态转换(编译时类型未知)

1
2
3
4
Type enumType = ...;
// 注意:枚举可以指定除 'int' 之外的基础类型
int numericValue = ...;
object boxedEnumValue = Enum.ToObject(enumType, numericValue);

使用扩展方法

1
2
3
4
public static T ToEnum<T>(this string enumString)
{
return (T) Enum.Parse(typeof (T), enumString);
}

使用示例:

1
Color colorEnum = "Red".ToEnum<Color>();

核心代码

以下是一个完整的示例,展示了如何将 int 类型转换为枚举类型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public enum MyEnum : int
{
Foo = 1,
Bar = 2,
Mek = 5
}

class Program
{
static void Main()
{
var e1 = (MyEnum)5;
var e2 = (MyEnum)6;

Console.WriteLine("{0} {1}", e1, e2);
Console.ReadLine();
}
}

最佳实践

  • 检查枚举值是否定义:在进行类型转换时,使用 Enum.IsDefined 方法检查整数值是否对应于枚举中的某个值,以避免意外的结果。
1
2
3
4
5
6
7
8
if (Enum.IsDefined(typeof(MyEnum), 6))
{
// 处理定义的值
}
else
{
// 处理未定义的值
}
  • 明确枚举的基础类型:即使编译器会检查基础类型,也建议在定义枚举时明确指定基础类型,以避免潜在的问题。
1
2
3
4
public enum MyEnum : short
{
Mek = 5
}

常见问题

  • 类型不匹配:如果枚举的基础类型与要转换的整数类型不兼容,可能会导致编译错误或运行时异常。例如,将一个超出 short 范围的整数值转换为基础类型为 short 的枚举。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public enum MyEnum : short
{
Mek = 5
}

class Program
{
static void Main()
{
var e1 = (MyEnum)32769; // 编译错误,超出 short 范围
object o = 5;
var e2 = (MyEnum)o; // 运行时异常,因为 o 是 int 类型
}
}
  • 未定义的枚举值:如果将一个未在枚举中定义的整数值进行转换,可能会导致意外的结果。可以使用 Enum.IsDefined 方法进行检查。

C# 中如何将 int 类型转换为枚举类型
https://119291.xyz/posts/2025-05-09.csharp-int-to-enum-conversion/
作者
ww
发布于
2025年5月9日
许可协议