枚举类型取值helper类

Posted mycnblogs7854

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了枚举类型取值helper类相关的知识,希望对你有一定的参考价值。

 枚举类型取值:

1、根据枚举下标拿取值(默认为 0,1,2,3,4)

2、根据枚举描述拿到枚举值

3、根据枚举下标拿到枚举值(不限下标,如101开头)

调用方法

调用1:Enum.GetNames(typeof(AddAttributeType))[0];   //注:这个适用于枚举下标为默认0开始的,拿到的值为string类型的枚举值(如果下标超出会报异常)

调用 2:EnumMethodHelper.EnumToDescription("101", typeof(AddAttributeType));   //注:这个是根据描述拿 到string类型的枚举值(没找到返回空)

调用3:EnumMethodHelper.ToEnumString(101, typeof(AddAttributeType));  //注:这个101为下标,可以把下标0,1,2,3换成101,102,103,等,然后根据101,102这个下标取值(没找到返回null)

枚举类

技术分享图片
/// <summary>
    /// 会员附加属性类型设置——附加属性分类
    /// </summary>
    public enum AddAttributeType
    {
        [Description("101")]
        电话 = 0,
        [Description("102")]
        联系地址 = 1,
        [Description("103")]
        车牌号 = 2,
        [Description("104")]
        纪念日 = 3,
        [Description("200")]
        附加属性 = 4
    }
View Code

枚举helper类

技术分享图片
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace Bestech.CRM.Portal.Common
{
    /// <summary>  
    /// Author: lixb  
    /// Date: 2018年5月24日
    /// Description: 枚举辅助类  
    /// </summary>  
    public static class EnumMethodHelper
    {
        /// <summary>
        /// 根据枚举描述拿到string类型的枚举值  显示用
        /// </summary>
        /// <param name="enumstr"></param>
        /// <param name="enumType"></param>
        /// <returns></returns>
        public static string EnumToDescription(string enumstr, Type enumType)
        {
            Type typeDescription = typeof(DescriptionAttribute);
            //拿到所有的集合
            FieldInfo[] fields = enumType.GetFields();
            string strText = string.Empty;
            //循环枚举集合
            foreach (FieldInfo field in fields)
            {
                if (field.FieldType.IsEnum)
                {
                    object[] arr = field.GetCustomAttributes(typeDescription, true);
                    if (arr.Length > 0)
                    {
                        DescriptionAttribute aa = (DescriptionAttribute)arr[0];
                        strText = aa.Description;
                        if (strText == enumstr)
                        {
                            return field.Name;
                        }
                    }
                }
            }
            return "";
        }

        /// <summary>  
        /// 扩展方法:根据枚举值得到相应的枚举定义字符串  (根据下标)
        /// </summary>  
        /// <param name="value"></param>  
        /// <param name="enumType"></param>  
        /// <returns></returns>  
        public static String ToEnumString(this int value, Type enumType)
        {
            NameValueCollection nvc = GetEnumStringFromEnumValue(enumType);
            return nvc[value.ToString()];
        }

        /// <summary>  
        /// 根据枚举类型得到其所有的 值 与 枚举定义字符串 的集合  
        /// </summary>  
        /// <param name="enumType"></param>  
        /// <returns></returns>  
        public static NameValueCollection GetEnumStringFromEnumValue(Type enumType)
        {
            NameValueCollection nvc = new NameValueCollection();
            Type typeDescription = typeof(DescriptionAttribute);
            System.Reflection.FieldInfo[] fields = enumType.GetFields();
            string strText = string.Empty;
            string strValue = string.Empty;
            foreach (FieldInfo field in fields)
            {
                if (field.FieldType.IsEnum)
                {
                    strValue = ((int)enumType.InvokeMember(field.Name, BindingFlags.GetField, null, null, null)).ToString();
                    nvc.Add(strValue, field.Name);
                }
            }
            return nvc;
        }
    }
}
View Code

 

以上是关于枚举类型取值helper类的主要内容,如果未能解决你的问题,请参考以下文章

java枚举类型

枚举类型

c++枚举类型的取值范围

Python之枚举类型

java里啥情况用枚举啊

Enum(枚举类型)的基本应用