在C#中获取枚举的整数值

在C#中获取枚举的整数值

技术背景

在C#编程中,枚举(enum)是一种值类型,它允许为一组常量值赋予友好的名称。有时,我们需要获取枚举成员对应的整数值,以便在程序中进行计算、比较或存储等操作。

实现步骤

1. 直接类型转换

如果枚举的底层类型是int(默认情况),可以直接将枚举值强制转换为int类型。

1
2
3
4
5
6
7
8
9
10
enum Question
{
Role = 2,
ProjectFunding = 3,
TotalEmployee = 4,
NumberOfServers = 5,
TopBusinessConcern = 6
}

int something = (int)Question.Role;

2. 处理不同底层类型的枚举

当枚举的底层类型不是int时,需要将其转换为对应的类型。

1
2
3
4
5
6
7
8
enum StarsInMilkyWay : long
{
Sun = 1,
V645Centauri = 2,
Wolf424B = 2147483649
}

long something = (long)StarsInMilkyWay.Wolf424B;

3. 使用Convert类和GetTypeCode方法

这种方法更具通用性,无论枚举的底层类型是什么,都能获取其整数值。

1
2
3
4
5
6
7
8
9
10
enum Sides
{
Left,
Right,
Top,
Bottom
}

Sides side = Sides.Bottom;
object val = Convert.ChangeType(side, side.GetTypeCode());

4. 使用扩展方法

可以创建一个扩展方法来简化获取枚举整数值的操作。

1
2
3
4
5
6
7
8
9
public static class ExtensionMethods
{
public static int IntValue(this Enum argEnum)
{
return Convert.ToInt32(argEnum);
}
}

var intValue = Question.Role.IntValue();

核心代码

以下是一些核心代码示例,展示了不同方式获取枚举整数值的实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// 直接类型转换
enum Question
{
Role = 2,
ProjectFunding = 3,
TotalEmployee = 4,
NumberOfServers = 5,
TopBusinessConcern = 6
}

int value1 = (int)Question.Role;

// 处理不同底层类型
enum StarsInMilkyWay : long
{
Sun = 1,
V645Centauri = 2,
Wolf424B = 2147483649
}

long value2 = (long)StarsInMilkyWay.Wolf424B;

// 使用Convert类和GetTypeCode方法
enum Sides
{
Left,
Right,
Top,
Bottom
}

Sides side = Sides.Bottom;
object val = Convert.ChangeType(side, side.GetTypeCode());

// 使用扩展方法
public static class ExtensionMethods
{
public static int IntValue(this Enum argEnum)
{
return Convert.ToInt32(argEnum);
}
}

var intValue = Question.Role.IntValue();

最佳实践

  • 选择合适的方法:根据枚举的底层类型和具体需求,选择合适的获取整数值的方法。如果枚举底层类型是int,直接类型转换是最简单的方式;如果不确定底层类型,使用Convert类和GetTypeCode方法更安全。
  • 使用扩展方法:为了提高代码的可读性和可维护性,可以创建扩展方法来统一处理枚举值的转换。

常见问题

1. 枚举底层类型不是int时直接转换为int会报错

如果枚举的底层类型是uintlongulong等,直接将其转换为int可能会导致溢出或编译错误。此时,需要将其转换为对应的类型。

2. 空引用异常

在使用扩展方法或隐式转换时,如果枚举值为null,可能会引发空引用异常。在代码中需要进行空值检查,以避免此类问题。


在C#中获取枚举的整数值
https://119291.xyz/posts/2025-05-15.get-int-value-from-enum-in-csharp/
作者
ww
发布于
2025年5月15日
许可协议