博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 枚举转列表
阅读量:4035 次
发布时间:2019-05-24

本文共 2874 字,大约阅读时间需要 9 分钟。

C# 枚举转列表

独立观察员 2020 年 9 月 1 日

 

今天有朋友问我,ComboBox 怎么绑定一个 Enum,其实他的意思是枚举如何转换为列表。想想这确实是一个挺正常的需求,但我一时也只想到遍历,他觉得麻烦,于是我在网上帮忙查了一下,提取了三个方法,后来在常用代码工具库也看到一个方法,所以总共四个方法,分为两组,功能可以说都是一样的,就是形式不同,现在分享给大家。

#region 获取枚举列表/// /// 通过枚举对象获取枚举列表/// /// 
/// ///
public static List
GetEnumList
(this T value){ var list = new List
(); if (value is Enum) { var valData =Convert.ToInt32((T)Enum.Parse(typeof(T), value.ToString())) ; var tps =Enum.GetValues(typeof (T)); list.AddRange(from object tp in tps where ((int)Convert.ToInt32((T)Enum.Parse(typeof(T), tp.ToString())) & valData) == valData select (T) tp); } return list;}/* 以下 参考:https://www.codenong.com/17123548/ *////
/// 通过枚举类型获取枚举列表;/// ///
///
///
public static List
GetEnumList
() where T : Enum{ List
list = Enum.GetValues(typeof(T)).OfType
().ToList(); return list;}/* 以下 参考:https://www.codenong.com/105372/ *////
/// Gets all items for an enum value.(通过枚举对象获取所有枚举)/// ///
///
The value.///
public static IEnumerable
GetAllItems
(this Enum value){ foreach (object item in Enum.GetValues(typeof(T))) { yield return (T)item; }}///
/// Gets all items for an enum type.(通过枚举类型获取所有枚举)/// ///
///
public static IEnumerable
GetAllItems
() where T : struct{ foreach (object item in Enum.GetValues(typeof(T))) { yield return (T)item; }}#endregion

 

按返回值类型,可以是 1 和 2 为一组,3 和 4 为一组;按方法性质,也可以将 1 和 3 为一组,2 和 4 为一组。

1 和 2 都是返回 List ,3 和 4 都是返回可枚举集合 IEnumerable,这个也很方便进行遍历或者转为 List 。

1 和 3 都是扩展方法,可以方便地通过枚举对象来获取相应的枚举类型的所有枚举,只不过从业务上看,这样调用的意图不够明确;而 2 和 4 则都是普通静态方法,通过静态类调用,也是比较简洁,且意图明确。

 

下面,我们分别在每个方法体内右键 — 创建单元测试:

 

最终单元测试代码如下:

[TestClass()]public class EnumExtensionTests{    ///     /// 枚举类型    ///     enum ELanguage    {        CSharp = 0,        Java = 1,        VB = 2    }    ///     /// 枚举对象    ///     private ELanguage _eLanguage = ELanguage.CSharp;    [TestMethod()]    public void GetEnumListTest1()    {        List
list = _eLanguage.GetEnumList(); // 通过枚举对象获取枚举列表; Assert.IsTrue(list.Count > 0); } [TestMethod()] public void GetEnumListTest() { List
list = EnumExtension.GetEnumList
(); // 通过枚举类型获取枚举列表; Assert.IsTrue(list.Count > 0); } [TestMethod()] public void GetAllItemsTest() { var allItems = _eLanguage.GetAllItems
(); // 通过枚举对象获取所有枚举; List
list = allItems.ToList(); Assert.IsTrue(list.Count > 0); } [TestMethod()] public void GetAllItemsTest1() { var allItems = EnumExtension.GetAllItems
(); // 通过枚举类型获取所有枚举; List
list = allItems.ToList(); Assert.IsTrue(list.Count > 0); }}

 

测试结果都是通过的:

 

最后给出代码地址:https://gitee.com/dlgcy/dotnetcodes/tree/dlgcy/DotNet.Utilities/ 枚举 

 

转载地址:http://srzdi.baihongyu.com/

你可能感兴趣的文章
剑指offer算法题分析与整理(三)
查看>>
Ubuntu 13.10使用fcitx输入法
查看>>
pidgin-lwqq 安装
查看>>
mint/ubuntu安装搜狗输入法
查看>>
C++动态申请数组和参数传递问题
查看>>
opencv学习——在MFC中读取和显示图像
查看>>
retext出现Could not parse file contents, check if you have the necessary module installed解决方案
查看>>
pyQt不同窗体间的值传递(一)——对话框关闭时返回值给主窗口
查看>>
linux mint下使用外部SMTP(如网易yeah.net)发邮件
查看>>
北京联通华为光猫HG8346R破解改桥接
查看>>
python使用win32*模块模拟人工操作——城通网盘下载器(一)
查看>>
python append 与浅拷贝
查看>>
Matlab与CUDA C的混合编程配置出现的问题及解决方案
查看>>
python自动化工具之pywinauto(零)
查看>>
python一句话之利用文件对话框获取文件路径
查看>>
PaperDownloader——文献命名6起来
查看>>
PaperDownloader 1.5.1——更加人性化的文献下载命名解决方案
查看>>
如何将PaperDownloader下载的文献存放到任意位置
查看>>
C/C++中关于动态生成一维数组和二维数组的学习
查看>>
系统架构:Web应用架构的新趋势---前端和后端分离的一点想法
查看>>