C#怎么遍历枚举 C# Enum.GetValues遍历方法

来源:这里教程网 时间:2026-02-21 17:33:10 作者:

在 C# 中遍历枚举最常用、最直接的方式就是用

Enum.GetValues
,它返回一个包含所有枚举值的数组,类型为
Array
,你可以用
foreach
for
遍历。

使用 Enum.GetValues + foreach 遍历(推荐)

这是最简洁清晰的做法,适合大多数场景。注意要显式转换为具体的枚举类型,否则拿到的是

object

foreach (var value in Enum.GetValues(typeof(DayOfWeek)))
{
    DayOfWeek day = (DayOfWeek)value;
    Console.WriteLine(day); // 输出:Sunday, Monday, ..., Saturday
}

也可以用泛型方式(C# 7.3+ 支持)更安全:

foreach (DayOfWeek day in Enum.GetValues<DayOfWeek>())
{
    Console.WriteLine($"{day} = {(int)day}");
}

获取枚举名称和值(Name + Value)

如果既要显示文字名,又要获取底层整数值,可以结合

Enum.GetNames
Enum.GetValues
,或用
Enum.GetName
动态查:

Enum.GetNames(typeof(MyEnum))
→ 返回
string[]
,只含名称
Enum.GetValues(typeof(MyEnum))
→ 返回
Array
,含原始值(如 int)

常用组合写法:

var names = Enum.GetNames(typeof(Status));
var values = Enum.GetValues(typeof(Status));
<p>for (int i = 0; i < names.Length; i++)
{
Console.WriteLine($"{names[i]} = {values.GetValue(i)}");
}

处理带 [Flags] 特性的枚举

如果是位标记枚举(如

[Flags] enum FileAccess
),
Enum.GetValues
仍会返回所有定义的单个值(不含组合值),比如
Read
Write
ReadWrite
(如果显式定义了)。它不会自动枚举所有可能的位组合。

所以:
– 如果你只想要“显式声明的枚举项”,照常调用

GetValues
即可;
– 如果需要生成所有合法的组合值(比如用于下拉筛选),就得自己按位运算组合,不能依赖
GetValues

小提示:避免常见错误

别对
Enum.GetValues
返回的
Array
直接用
as T[]
强转——它不是泛型数组,会返回
null
不要在循环里反复调用
typeof(T)
Enum.GetValues
——可提前缓存结果提升性能
枚举底层类型不一定是
int
(可能是
byte
long
等),转换时建议用
Convert.ToInt32(value)
更安全

基本上就这些。用好

Enum.GetValues
加上一次类型转换,遍历枚举既简单又可靠。

相关推荐