循环访问C#枚举的键和值

有这样一个需求,把代码中的枚举读成List,然后动态展示在界面,这样的优点是,修改了枚举就不需要再修改展示界面的值了。下面探究一下怎么遍历出枚举的健和值。

    首先新建一个枚举,如下:

 public enum SexEnum : int        {            男 = 0,            女 = 1,            其他 = 2        }

接下来尝试用foreach遍历的方式来执行.

循环访问C#枚举的键和值

芭比Q了,直接报错了,原因写的很清楚,枚举是个类型,不可以遍历,真的就不可以了吗?答案是否定的。查阅相关资料可以把枚举转换成lEnumerable了就可以使用遍历的方式循环读取键和值了,转换可以使用Enum.GetValues,代码如下:

 foreach (int i in Enum.GetValues(typeof(SexEnum))) { //这里只是获取了值,而名字单独用 Enum.GetName方法获取。      string name = Enum.GetName(typeof(SexEnum), i);      //使用匿名类存起来,实际可以使用List或者字典来做      var E = new { Name = name,Value = i};      Console.WriteLine($"枚举值名称{E.Name}值是{E.Value}");}

效果如下:

循环访问C#枚举的键和值

获取名称可以不可以省略上面的方法呢?当然可以,上代码

 foreach (var itemValue in Enum.GetValues(typeof(SexEnum))) {      Console.WriteLine($"枚举值名称{itemValue}值是{(int)itemValue}"); } //结果跟上面一样,这就是C#语法的魅力,好用啊

当然也可以不用foreach来遍历,直接使用lamdba表达式一句代码解决,代码如下:

var result = Enum.GetValues(typeof(SexEnum)).Cast<SexEnum>().Select(s => new  { Name = s.ToString(), Value = (int)s }).ToList();

当然还是基于Enum.GetValues,很简单的一句代码解决问题。

结语

本文讲述了循环访问C#枚举的键和值,使用了两种方式解决,当然还有其它的方法,大家可以自己试一试。希望本文对你有所收获,同时欢迎留言和吐槽。