• C# 获取枚举的描述Description


    方法类:

        public static class EnumExtensions
        {
            #region Enum
    
            /// <summary>
            /// 获取枚举变量值的 Description 属性
            /// </summary>
            /// <param name="obj">枚举变量</param>
            /// <returns>如果包含 Description 属性,则返回 Description 属性的值,否则返回枚举变量值的名称</returns>
            public static string GetDescription(this System.Enum obj)
            {
                return GetDescription(obj, false);
            }
    
            /// <summary>
            /// 获取枚举变量值的 Description 属性
            /// </summary>
            /// <param name="obj">枚举变量</param>
            /// <param name="isTop">是否改变为返回该类、枚举类型的头 Description 属性,而不是当前的属性或枚举变量值的 Description 属性</param>
            /// <returns>如果包含 Description 属性,则返回 Description 属性的值,否则返回枚举变量值的名称</returns>
            public static string GetDescription(this System.Enum obj, bool isTop)
            {
                if (obj == null)
                {
                    return string.Empty;
                }
                try
                {
                    Type enumType = obj.GetType();
                    DescriptionAttribute dna = null;
                    if (isTop)
                    {
                        dna = (DescriptionAttribute)Attribute.GetCustomAttribute(enumType, typeof(DescriptionAttribute));
                    }
                    else
                    {
                        FieldInfo fi = enumType.GetField(System.Enum.GetName(enumType, obj));
                        dna = (DescriptionAttribute)Attribute.GetCustomAttribute(
                           fi, typeof(DescriptionAttribute));
                    }
                    if ((dna != null)
                        && (string.IsNullOrEmpty(dna.Description) == false))
                    {
                        return dna.Description;
                    }
                }
                catch
                {
                }
                return obj.ToString();
            }
    
            /// <summary>
            /// 获取枚举变量值的 Description 属性
            /// </summary>
            /// <param name="obj">枚举变量</param>
            /// <returns>如果包含 Description 属性,则返回 Description 属性的值,否则返回枚举变量值的名称</returns>
            public static string GetDescription<TEnum>(this TEnum obj)
            {
                return GetDescription(obj, false);
            }
    
            /// <summary>
            /// 获取枚举变量值的 Description 属性
            /// </summary>
            /// <param name="obj">枚举变量</param>
            /// <param name="isTop">是否改变为返回该类、枚举类型的头 Description 属性,而不是当前的属性或枚举变量值的 Description 属性</param>
            /// <returns>如果包含 Description 属性,则返回 Description 属性的值,否则返回枚举变量值的名称</returns>
            public static string GetDescription<TEnum>(this TEnum obj, bool isTop)
            {
                if (obj == null)
                {
                    return string.Empty;
                }
                try
                {
                    Type enumType = obj.GetType();
                    DescriptionAttribute dna = null;
                    if (isTop)
                    {
                        dna = (DescriptionAttribute)Attribute.GetCustomAttribute(enumType, typeof(DescriptionAttribute));
                    }
                    else
                    {
                        FieldInfo fi = enumType.GetField(System.Enum.GetName(enumType, obj));
                        dna = (DescriptionAttribute)Attribute.GetCustomAttribute(
                           fi, typeof(DescriptionAttribute));
                    }
                    if ((dna != null)
                        && (string.IsNullOrEmpty(dna.Description) == false))
                    {
                        return dna.Description;
                    }
                }
                catch
                {
                }
                return obj.ToString();
            }
    
            /// <summary>
            /// 获取字段Description
            /// </summary>
            /// <param name="fieldInfo">FieldInfo</param>
            /// <returns>DescriptionAttribute[] </returns>
            public static DescriptionAttribute[] GetDescriptAttr(this FieldInfo fieldInfo)
            {
                if (fieldInfo != null)
                {
                    return (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
                }
                return null;
            }
    
            /// <summary>
            /// 根据Description获取枚举
            /// 说明:
            /// 单元测试-->通过
            /// </summary>
            /// <typeparam name="T">枚举类型</typeparam>
            /// <param name="description">枚举描述</param>
            /// <returns>枚举</returns>
            public static T GetEnumName<T>(string description)
            {
                Type _type = typeof(T);
                foreach (FieldInfo field in _type.GetFields())
                {
                    DescriptionAttribute[] _curDesc = field.GetDescriptAttr();
                    if (_curDesc != null && _curDesc.Length > 0)
                    {
                        if (_curDesc[0].Description == description)
                            return (T)field.GetValue(null);
                    }
                    else
                    {
                        if (field.Name == description)
                            return (T)field.GetValue(null);
                    }
                }
                throw new ArgumentException(string.Format("{0} 未能找到对应的枚举.错误枚举{1}", description, _type.Name), "Description");
            }
    
            /// <summary>
            /// 将枚举转换为ArrayList
            /// 说明:
            /// 若不是枚举类型,则返回NULL
            /// 单元测试-->通过
            /// </summary>
            /// <param name="type">枚举类型</param>
            /// <returns>ArrayList</returns>
            public static ArrayList ToArrayList(this Type type)
            {
                if (type.IsEnum)
                {
                    ArrayList _array = new ArrayList();
                    Array _enumValues = System.Enum.GetValues(type);
                    foreach (System.Enum value in _enumValues)
                    {
                        _array.Add(new KeyValuePair<System.Enum, string>(value, GetDescription(value)));
                    }
                    return _array;
                }
                return null;
            }
    
            #endregion Enum
        }

    枚举类:

            #region 职员流程类型
    
            /// <summary>
            /// 职员流程类型
            /// </summary>
            [Description("职员流程类型")]
            public enum EmployeeAffairTypeEnum
            {
                /// <summary>
                /// 入职
                /// </summary>
                [Description("入职")]
                ApplyInureEmpInPositon,
    
                /// <summary>
                /// 转正
                /// </summary>
                [Description("转正")]
                ApplyInureEmpInPass,
    
                /// <summary>
                /// 兼职
                /// </summary>
                [Description("兼职")]
                ApplyInureEmpPartJob,
    
                /// <summary>
                /// 结束兼职
                /// </summary>
                [Description("结束兼职")]
                ApplyInureEmpEndPartJob,
    
                /// <summary>
                /// 异动
                /// </summary>
                [Description("异动")]
                ApplyInureEmpInAdjust,
    
                /// <summary>
                /// 离职
                /// </summary>
                [Description("离职")]
                ApplyInureEmpInDimission,
    
                /// <summary>
                /// 正式合同续签
                /// </summary>
                [Description("正式合同续签")]
                ApplyInureEmpContractRenewal,
    
                /// <summary>
                /// 职员群调审批
                /// </summary>
                [Description("职员群调审批")]
                ApplyInureEmpGroupTransfer,
    
                /// <summary>
                /// 行车津贴
                /// </summary>
                [Description("行车津贴")]
                ApplyInureEmpMileage
            }
    
            #endregion 职员流程类型
    
            #region 职员申请单数据(入职、转正、异动、离职、兼职、结束兼职、合同续签、职员异动)的搜索视图
    
            /// <summary>
            /// 职员申请单数据(入职、转正、异动、离职、兼职、结束兼职、合同续签、职员异动)的搜索视图
            /// </summary>
            [Description("职员申请表视图")]
            public enum EmployeeApplyViewEnum
            {
                /// <summary>
                /// 入职
                /// </summary>
                [Description("VM_ApplyInureEmpInPositon")]
                ApplyInureEmpInPositon,
    
                /// <summary>
                /// 转正
                /// </summary>
                [Description("VM_ApplyInureEmpInPass")]
                ApplyInureEmpInPass,
    
                /// <summary>
                /// 兼职
                /// </summary>
                [Description("VM_ApplyInureEmpPartJob")]
                ApplyInureEmpPartJob,
    
                /// <summary>
                /// 结束兼职
                /// </summary>
                [Description("VM_ApplyInureEmpEndPartJob")]
                ApplyInureEmpEndPartJob,
    
                /// <summary>
                /// 异动
                /// </summary>
                [Description("VM_ApplyInureEmpInAdjust")]
                ApplyInureEmpInAdjust,
    
                /// <summary>
                /// 离职
                /// </summary>
                [Description("VM_ApplyInureEmpInDimission")]
                ApplyInureEmpInDimission,
    
                /// <summary>
                /// 正式合同续签
                /// </summary>
                [Description("VM_ApplyInureEmpContractRenewal")]
                ApplyInureEmpContractRenewal,
    
                /// <summary>
                /// 职员群调审批
                /// </summary>
                [Description("VM_ApplyInureEmpGroupTransfer")]
                ApplyInureEmpGroupTransfer,
    
                /// <summary>
                /// 行车津贴
                /// </summary>
                [Description("VM_ApplyInureEmpMileage")]
                ApplyInureEmpMileage
            }
    
            #endregion

    调用方法:

                var affairDescription = EmployeeAffairTypeEnum.ApplyInureEmpContractRenewal.GetDescription();
                Console.WriteLine(affairDescription);
                var viewName = ((EmployeeApplyViewEnum)EmployeeAffairTypeEnum.ApplyInureEmpContractRenewal).GetDescription();
                Console.WriteLine(viewName);
  • 相关阅读:
    form表单提交方式
    docker overlay2 目录下文件夹占用空间过大
    基本操作:vscode快捷键
    基本操作:vscodegit使用和命令
    关闭win10“快速启动”功能
    在CentOS 7.4下配置VNC Server服务
    golang 百分比抽奖几率
    对新闻客户端APP的性能优化实战
    性能优化专题 OOM 与 内存优化
    centos 安装谷歌浏览器和selenium环境 李刚
  • 原文地址:https://www.cnblogs.com/gygtech/p/9894439.html
Copyright © 2020-2023  润新知