服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C# 实现枚举转列表

C# 实现枚举转列表

2022-10-25 13:14独立观察员•博客 C#

这篇文章主要介绍了C# 如何实现枚举转列表,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下

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

?
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#region 获取枚举列表
 
/// <summary>
/// 通过枚举对象获取枚举列表
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="value"></param>
/// <returns></returns>
public static List<T> GetEnumList<T>(this T value)
{
 var list = new List<T>();
 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/ */
 
/// <summary>
/// 通过枚举类型获取枚举列表;
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="value"></param>
/// <returns></returns>
public static List<T> GetEnumList<T>() where T : Enum
{
 List<T> list = Enum.GetValues(typeof(T)).OfType<T>().ToList();
 return list;
}
 
/* 以下 参考:https://www.codenong.com/105372/ */
 
/// <summary>
/// Gets all items for an enum value.(通过枚举对象获取所有枚举)
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="value">The value.</param>
/// <returns></returns>
public static IEnumerable<T> GetAllItems<T>(this Enum value)
{
 foreach (object item in Enum.GetValues(typeof(T)))
 {
 yield return (T)item;
 }
}
 
/// <summary>
/// Gets all items for an enum type.(通过枚举类型获取所有枚举)
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static IEnumerable<T> GetAllItems<T>() 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 则都是普通静态方法,通过静态类调用,也是比较简洁,且意图明确。

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

C# 实现枚举转列表

最终单元测试代码如下:

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

测试结果都是通过的:

C# 实现枚举转列表

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

转载自 独立观察员•博客

以上就是C# 实现枚举转列表的详细内容,更多关于c# 枚举转列表的资料请关注服务器之家其它相关文章!

原文链接:http://dlgcy.com/csharp-enum-to-list/

延伸 · 阅读

精彩推荐
  • C#C# 标准事件流实例代码

    C# 标准事件流实例代码

    这篇文章主要介绍了C# 标准事件流的实例代码,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...

    滑猪小板6852022-09-28
  • C#Devexpress treelist 简介

    Devexpress treelist 简介

    本文给大家简单介绍了Devexpress treelist 知识,包括属性列表,事件及使用方法,非常不错,具有参考借鉴价值,需要的朋友参考下...

    一枚水8802021-12-16
  • C#轻松学习C#的异常处理

    轻松学习C#的异常处理

    轻松学习C#的异常处理,对C#的异常处理感兴趣的朋友可以参考本篇文章,帮助大家更灵活的运用C#的异常处理。...

    C#教程网8682021-11-04
  • C#C#实现刷新桌面的方法

    C#实现刷新桌面的方法

    这篇文章主要介绍了C#实现刷新桌面的方法,涉及C#基于shell32.dll动态链接库实现系统桌面刷新的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...

    C#教程网3822021-10-26
  • C#C#获取网页源代码的方法

    C#获取网页源代码的方法

    这篇文章主要介绍了C#获取网页源代码的方法,涉及C#基于自定义函数读取网页html代码的方法,具有一定参考借鉴价值,需要的朋友可以参考下...

    C#教程网9602021-10-26
  • C#C#中参数数组、引用参数和输出参数示例详解

    C#中参数数组、引用参数和输出参数示例详解

    这篇文章主要给大家介绍了关于C#中参数数组、引用参数和输出参数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参...

    mwangjs9122022-02-23
  • C#winform 实现选择文件和选择文件夹对话框的简单实例

    winform 实现选择文件和选择文件夹对话框的简单实例

    下面小编就为大家带来一篇winform 实现选择文件和选择文件夹对话框的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小...

    C#教程网7942021-12-21
  • C#C#中FlagsAttribute属性在enum中的应用详解

    C#中FlagsAttribute属性在enum中的应用详解

    这篇文章主要介绍了C#中FlagsAttribute属性在enum中的应用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    @朱较瘦4332022-10-12