Description相关

    public static class DescriptionEx
    {
        /// <summary>
        /// 获取DescriptionAttribute信息
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static string GetDesc(this object obj, bool nameInstead = true)
        {
            object[] attr = obj.GetType().GetCustomAttributes(false);
            DescriptionAttribute descAttr = (DescriptionAttribute)attr.FirstOrDefault(f => f.GetType() == typeof(DescriptionAttribute));
            if (descAttr == null)
            {
                return obj.ToString();
            }
            else
            {
                return descAttr.Description;
            }
        }

        /// <summary>
        /// 获取类属性上方DescriptionAttribute信息
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <param name="expr"></param>
        /// <returns></returns>
        public static string GetDesc<T>(this object obj, Expression<Func<T, object>> expr)
        {
            PropertyDescriptor pd = TypeDescriptor.GetProperties(typeof(T))[GetPropertyName(expr)];
            //PropertyDescriptor pd = TypeDescriptor.GetProperties(typeof(T))[name];
            DescriptionAttribute description = pd == null ? null : pd.Attributes[typeof(DescriptionAttribute)] as DescriptionAttribute;
            return description == null ? "" : description.Description;
        }

        /// <summary>
        /// 获取表达式调用的字段名称
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="expr"></param>
        /// <returns></returns>
        private static string GetPropertyName<T>(Expression<Func<T, object>> expr)
        {
            switch (expr.Body)
            {
                case MemberExpression memberExpression:
                    return memberExpression.Member.Name;
                case UnaryExpression unaryExpression:
                    if (unaryExpression.Operand is MemberExpression expression)
                    {
                        return expression.Member.Name;
                    }

                    break;
                default:
                    break;
            }

            return "";
        }

        /// <summary>
        /// 获取枚举DescriptionAttribute信息
        /// </summary>
        /// <param name="value"></param>
        /// <param name="nameInstead">当枚举值没有定义DescriptionAttribute,是否使用枚举名代替,默认是使用</param>
        /// <returns></returns>
        public static string GetDesc(this Enum value, bool nameInstead = true)
        {
            Type type = value.GetType();
            string name = System.Enum.GetName(type, value);
            if (name == null)
            {
                return null;
            }

            FieldInfo field = type.GetField(name);
            DescriptionAttribute attribute = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) as DescriptionAttribute;

            if (attribute == null && nameInstead == true)
            {
                return name;
            }
            return attribute?.Description;
        }
    }

使用

 [TestClass]
    public class DescTest
    {
        /// <summary>
        /// 获取类上方description
        /// </summary>
        [TestMethod]
        public void ClassDesc()
        {
            A a = new A();

            string desc = a.GetDesc();
            System.Console.WriteLine(desc);
        }

        /// <summary>
        /// 获取对象属性description
        /// </summary>
        [TestMethod]
        public void ObjDesc()
        {
            A a = new();

            //string desc = a.Id.GetDescription<A>(nameof(a.Id), null);
            string desc = a.Id.GetDesc<A>(f => a.Id);
            System.Console.WriteLine(desc);
        }

        /// <summary>
        /// 获取枚举description
        /// </summary>
        [TestMethod]
        public void Enumesc()
        {
            string desc = TestTypeEnum.First.GetDesc();

            System.Console.WriteLine(desc);
        }
    }
posted @ 2021-03-17 13:50  Hey,Coder!  阅读(57)  评论(0编辑  收藏  举报