zoukankan      html  css  js  c++  java
  • 获取枚举类型的 中文 描述 和值

    C# 通过Attitude特性来实现,相对方便些

    namespace Extensions
    {
        /// <summary>
        /// 定义枚举扩展类
        /// </summary>
        public static class EnumExtensions
        {
            /// <summary>
            /// 获取枚举变量值的 Description 属性
            /// </summary>
            /// <param name="obj">枚举变量</param>
            /// <returns>如果包含 Description 属性,则返回 Description 属性的值,否则返回枚举变量值的名称</returns>
            public static string GetDescription(this object 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 object obj, bool isTop)
            {
                if (obj == null)
                {
                    return string.Empty;
                }
                try
                {
                    var enumType = obj.GetType();
                    DescriptionAttribute dna;
                    if (isTop)
                    {
                        dna = (DescriptionAttribute)Attribute.GetCustomAttribute(enumType, typeof(DescriptionAttribute));
                    }
                    else
                    {
                        var fi = enumType.GetField(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>
            /// 获取枚举变量值的 ExtendProperty 属性
            /// </summary>
            /// <param name="obj">枚举变量</param>
            /// <returns>如果包含 ExtendProperty 属性,则返回 ExtendProperty 属性的值,否则返回枚举变量值的名称</returns>
            public static string GetExtendProperty(this object obj)
            {
                if (obj == null)
                {
                    return string.Empty;
                }
                try
                {
                    Type _enumType = obj.GetType();
                    ExtendPropertyAttribute dna = null;
    
                    FieldInfo fi = _enumType.GetField(Enum.GetName(_enumType, obj));
                    dna = (ExtendPropertyAttribute)Attribute.GetCustomAttribute(
                       fi, typeof(ExtendPropertyAttribute));
    
                    if (dna != null && !string.IsNullOrEmpty(dna.ExtendProperty))
                        return dna.ExtendProperty;
                }
                catch
                {
                }
                return obj.ToString();
            }
        }
    
    
        [AttributeUsage(AttributeTargets.Field)]
        public class ExtendPropertyAttribute : Attribute
        {
            public string ExtendProperty;
            public ExtendPropertyAttribute(string extendProperty)
            {
                this.ExtendProperty = extendProperty;
            }
        }
    }
    
    
    static class Program
    {
        public enum EnumTest
        {
            [Description("")]
            Undefinition,
            [Description("红色")]
            Red,
            [Description("绿色")]
            Green,
            [Description("蓝色")]
            Blue = 4
        }
    
        private static void Main(string[] args)
        {
            foreach (EnumTest enumTest in Enum.GetValues(typeof(EnumTest)))
            { 
                Console.WriteLine((int)enumTest + ":" + enumTest);
            }
    
            Console.WriteLine("名称:" + EnumTest.Blue.GetDescription());
            Console.WriteLine("值:" + (int)EnumTest.Blue);
            Console.ReadLine();
        }
    }

    JAVA 编码的时候繁琐些,每次都需要定义 get,set 方法,下面是目前找到的相对好使,常用的方法

    public enum EnumTest {
        Undefinition(0,""),Red(1, "红色"), Green(2, "绿色"), Blue(4, "蓝色");
    
        private int _value;
        private String _name;
    
        EnumTest(int value, String name)
        {
            _value = value;
            _name = name;
        }
    
        public int getValue()
        {
            return _value;
        }
    
        public String getName()
        {
            return _name;
        }
    }
    
    public static void main(String[] args) throws Exception {
    
        EnumSet<EnumTest> weekSet = EnumSet.allOf(EnumTest.class);
        for (EnumTest day : weekSet) {
            System.out.println(day.getName());
            System.out.println(day.getValue());
        }
        System.out.println("名称:"+EnumTest.Blue.getName());
        System.out.println("顺序值:"+EnumTest.Blue.ordinal());
        System.out.println("自定义值:"+EnumTest.Blue.getValue());
    }
  • 相关阅读:
    解决SharePoint 文档库itemadded eventhandler导致的上传完成后,编辑页面保持报错的问题,错误信息为“该文档已经被编辑过 the file has been modified by...”
    解决SharePoint 2013 designer workflow 在发布的报错“负载平衡没有设置”The workflow files were saved but cannot be run.
    随机实例,随机值
    Spring4笔记
    struts2笔记(3)
    struts2笔记(2)
    获取文本的编码类型(from logparse)
    FileUtil(from logparser)
    DateUtil(SimpleDateFormat)
    struts2笔记
  • 原文地址:https://www.cnblogs.com/vipsoft/p/7477436.html
Copyright © 2011-2022 走看看