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

在C#中遍历枚举最常用方式是Enum.GetValues,返回Array类型,需显式转换为具体枚举类型或使用C# 7.3+泛型重载;配合GetNames可获取名称与值;Flags枚举需手动位运算生成组合值。

c#怎么遍历枚举 c# enum.getvalues遍历方法

在 C# 中遍历枚举最常用、最直接的方式就是用 Enum.GetValues,它返回一个包含所有枚举值的数组,类型为 Array,你可以用 foreachfor 遍历。

使用 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()){    Console.WriteLine($"{day} = {(int)day}");}

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

如果既要显示文字名,又要获取底层整数值,可以结合 Enum.GetNamesEnum.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));

for (int i = 0; i < names.Length; i++){Console.WriteLine($"{names[i]} = {values.GetValue(i)}");}

处理带 [Flags] 特性的枚举

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

所以:
– 如果你只想要“显式声明的枚举项”,照常调用 GetValues 即可;
– 如果需要生成所有合法的组合值(比如用于下拉筛选),就得自己按位运算组合,不能依赖 GetValues

小提示:避免常见错误

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

基本上就这些。用好 Enum.GetValues 加上一次类型转换,遍历枚举既简单又可靠。

以上就是C#怎么遍历枚举 C# Enum.GetValues遍历方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1442985.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 19:35:44
下一篇 2025年12月17日 19:36:07

相关推荐

发表回复

登录后才能评论
关注微信