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());
    }
  • 相关阅读:
    gitlab-ci runner注册失败问题
    第一个shell脚本
    Float、Double实例化对象后,通过equals和==验证何时返回true,何时返回false
    TestNG 基本注解@BeforeMethod、@AfterMethod 和@BeforeClass、@AfterClass 的区别以及实际问题的解决
    Windows虚拟机环境搭建 Selenium3+Java+Maven+TestNG+Jenkins+Allure 步骤及问题总结
    Linux-Kafka 0.10.2.0版本单机安装
    使用mysql驱动包8.0版本逆向工程时踩的坑
    使用WebStorm编辑Vue项目时报错,Expected indentation of 0 spaces but found 2
    Java并发编程阅读笔记(一)
    (二)创建用户并添加用户
  • 原文地址:https://www.cnblogs.com/vipsoft/p/7477436.html
Copyright © 2011-2022 走看看