C#枚举类型的常用操作总结

本文介绍如何在C#中高效操作枚举类型,包括获取枚举列表、枚举名称及描述等实用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

枚举类型是定义了一组“符号名称/值”配对。枚举类型是强类型的。每个枚举类型都是从system.Enum派生,又从system.ValueType派生,而system.ValueType又从system.Object派生,所以枚举类型是指类型。

  编译枚举类型时,C#编译器会把每个符号转换成类型的一个常量字段。C#编译器将枚举类型视为基元类型。

 1.获取枚举列表:

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
         /// <summary>
         /// 获取枚举列表
         /// </summary>
         /// <param name="enumType">枚举的类型</param>
         /// <returns>枚举列表</returns>
         public  static  Dictionary< int string > GetEnumList(Type enumType)
         {
             var  dic =  new  Dictionary< int string >();
             try
             {
                 var  fd = enumType.GetFields();
                 for  ( var  index = 1; index < fd.Length; ++index)
                 {
                     var  info = fd[index];
                     var  fieldValue = System.Enum.Parse(enumType, fd[index].Name);
                     var  attrs = info.GetCustomAttributes( typeof (EnumTextAttribute),  false );
                     foreach  (EnumTextAttribute attr  in  attrs)
                     {
                         var  key = ( int )fieldValue;
                         if  (key == -100)  continue ;
                         var  value = attr.Text;
                         dic.Add(key, value);
                     }
                 }
                 return  dic;
             }
             catch  (Exception ex)
             {
                 throw  new  Exception(ex.Message);
             }
         }

2.获取枚举名称:

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
         /// <summary>
         /// 获取枚举名称
         /// </summary>
         /// <param name="enumType">枚举的类型</param>
         /// <param name="id">枚举值</param>
         /// <returns>如果枚举值存在,返回对应的枚举名称,否则,返回空字符</returns>
         public  static  string  GetEnumTextById(Type enumType,  int  id)
         {
             var  ret =  string .Empty;
             try
             {
                 var  dic = GetEnumList(enumType);
                 foreach  ( var  item  in  dic)
                 {
                     if  (item.Key != id)  continue ;
                     ret = item.Value;
                     break ;
                 }
                 return  ret;
             }
             catch  (Exception ex)
             {
                 throw  new  Exception(ex.Message);
             }
         }

3.根据枚举值获取对应中文描述:

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
         /// <summary>
         /// 根据枚举值获取对应中文描述
         /// </summary>
         /// <param name="enumValue">枚举值</param>
         /// <returns>枚举值中文描述</returns>
         public  static  string  GetEnumTextByEnum( object  enumValue)
         {
             var  ret =  string .Empty;
             if  (( int )enumValue == -1)  return  ret;
             try
             {
                 var  dic = GetEnumList(enumValue.GetType());
                 foreach  ( var  item  in  dic)
                 {
                     if  (item.Key != ( int )enumValue)  continue ;
                     ret = item.Value;
                     break ;
                 }
                 return  ret;
             }
             catch  (Exception ex)
             {
                 throw  new  Exception(ex.Message);
             }
         }

4.获取枚举名称:

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
         /// <summary>
         /// 获取枚举名称
         /// </summary>
         /// <param name="enumType">枚举的类型</param>
         /// <param name="index">枚举值的位置编号</param>
         /// <returns>如果枚举值存在,返回对应的枚举名称,否则,返回空字符</returns>
         public  static  string  GetEnumTextByIndex(Type enumType,  int  index)
         {
             var  ret =  string .Empty;
             var  dic = GetEnumList(enumType);
             if  (index < 0 || index > dic.Count)
                 return  ret;
             var  i = 0;
             foreach  ( var  item  in  dic)
             {
                 if  (i == index)
                 {
                     ret = item.Value;
                     break ;
                 }
                 i++;
             }
 
             return  ret;
         }

5.获取枚举值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
         /// <summary>
         /// 获取枚举值
         /// </summary>
         /// <param name="enumType">枚举的类型</param>
         /// <param name="name">枚举名称</param>
         /// <returns>如果枚举名称存在,返回对应的枚举值,否则,返回-1</returns>
         public  static  int  GetEnumIdByName(Type enumType,  string  name)
         {
             var  ret = -1;
             if  ( string .IsNullOrEmpty(name))
                 return  ret;
             var  dic = GetEnumList(enumType);
             foreach  ( var  item  in  dic)
             {
                 if  ( string .Compare(item.Value, name, StringComparison.Ordinal) != 0)  continue ;
                 ret = item.Key;
                 break ;
             }
             return  ret;
         }

6.获取名字对应枚举值:

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
         /// <summary>
         /// 获取名字对应枚举值
         /// </summary>
         /// <typeparam name="T">枚举类型</typeparam>
         /// <param name="name">枚举名称</param>
         /// <returns></returns>
         public  static  T GetEnumIdByName<T>( string  name)  where  T :  new ()
         {
             var  type =  typeof (T);
 
             var  enumItem = (T)TypeDescriptor.GetConverter(type).ConvertFrom( "-1" );
             if  ( string .IsNullOrEmpty(name))
                 return  enumItem;
 
             try
             {
                 var  fd =  typeof (T).GetFields();
                 for  ( var  index = 1; index < fd.Length; ++index)
                 {
                     var  info = fd[index];
                     var  fieldValue = System.Enum.Parse(type, fd[index].Name);
                     var  attrs = info.GetCustomAttributes( typeof (EnumTextAttribute),  false );
                     if  (attrs.Length != 1)  continue ;
                     var  attr = (EnumTextAttribute)attrs[0];
                     if  (!name.Equals(attr.Text))  continue ;
                     enumItem = (T)fieldValue;
                     break ;
                 }
                 return  enumItem;
             }
             catch  (Exception ex)
             {
                 throw  new  Exception(ex.Message);
             }
         }

7.获取枚举值所在的位置编号:

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
         /// <summary>
         /// 获取枚举值所在的位置编号
         /// </summary>
         /// <param name="enumType">枚举的类型</param>
         /// <param name="name">枚举名称</param>
         /// <returns>如果枚举名称存在,返回对应的枚举值的位置编号,否则,返回-1</returns>
         public  static  int  GetEnumIndexByName(Type enumType,  string  name)
         {
             var  ret = -1;
 
             if  ( string .IsNullOrEmpty(name))
                 return  ret;
 
             var  dic = GetEnumList(enumType);
             var  i = 0;
             foreach  ( var  item  in  dic)
             {
                 if  ( string .Compare(item.Value, name, StringComparison.Ordinal) == 0)
                 {
                     ret = i;
                     break ;
                 }
                 i++;
             }
 
             return  ret;
         }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值