zoukankan      html  css  js  c++  java
  • Ahjesus获取自定义属性Attribute或属性的名称

    1:设置自己的自定义属性

        public class NameAttribute:Attribute {
            private string _description;
            public NameAttribute(string description) {
                _description = description;
            }
            
            public string Description {
                get { return _description; }
            }
        }

    2:设置获取属性或属性名的类

        /// <summary>
        /// 获取自定义属性Name或者属性名称
        /// </summary>
        /// <typeparam name="T">类型</typeparam>
        public class AttributeHelper<T> where T : new() {        
            /// <summary>
            /// 获取枚举类型自定义属性Name
            /// </summary>
            /// <param name="type">枚举</param>
            /// <returns></returns>
            public string NameFor(object type) {
                T test = (T)type;
                FieldInfo fieldInfo = test.GetType().GetField(test.ToString());
                object[] attribArray = fieldInfo.GetCustomAttributes(false);
                //IList<CustomAttributeData> list = fieldInfo.GetCustomAttributesData();
                string des = (attribArray[0] as NameAttribute).Description;
                return des;
            }
    
            /// <summary>
            /// 获取属性自定义属性Name
            /// </summary>
            /// <param name="predicate">表达式</param>
            /// <returns></returns>
            public string NameFor(Expression<Func<T, object>> expr) {
                string name = PropertyNameFor(expr);
                T et = new T();
                Type type = et.GetType();
                PropertyInfo[] properties = type.GetProperties();
                object[] attributes = null;
                foreach (PropertyInfo p in properties) {
                    if (p.Name == name) {
                        attributes = p.GetCustomAttributes(typeof(NameAttribute), true);
                        break;
                    }
                }//出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!
    string des = ((NameAttribute)attributes[0]).Description; return des; } /// <summary> /// 获取属性的名称 /// </summary> /// <param name="expr"></param> /// <returns></returns> public string PropertyNameFor(Expression<Func<T, object>> expr) { var rtn = ""; if (expr.Body is UnaryExpression) { rtn = ((MemberExpression)((UnaryExpression)expr.Body).Operand).Member.Name; }//出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!
           else if (expr.Body is MemberExpression) { rtn = ((MemberExpression)expr.Body).Member.Name; } else if (expr.Body is ParameterExpression) { rtn = ((ParameterExpression)expr.Body).Type.Name; } return rtn; } }

    3:设置测试实体类和枚举

        public class MyEntity {
            public MyEntity() {
                Name = "Jude";
                Age = 11;
            }
            [Name("姓名")]
            public string Name { get; set; }
            [Name("年龄")]
            public int Age { get; set; }
        }
        public enum MyEnum {
            [Name("欧洲")]
            Europe = 0,
            [Name("亚洲")]
            Asia = 1,
            [Name("美洲")]
            America = 2
        }

    4:开始测试

        public partial class WebForm1 : System.Web.UI.Page {
            protected void Page_Load(object sender, EventArgs e) {
                AttributeHelper<MyEntity> myEntityAttr = new AttributeHelper<MyEntity>();
                MyEntity myEntity = new MyEntity();
                AttributeHelper<MyEnum> myEnumAttr = new AttributeHelper<MyEnum>();
                Response.Write(myEntityAttr.NameFor(it => it.Name) + ":" + myEntity.Name + "
    ");//姓名:Jude
                Response.Write(myEntityAttr.NameFor(it => it.Age) + ":" + myEntity.Age + "
    ");//年龄:11
                Response.Write(myEntityAttr.PropertyNameFor(it => it.Name) + ":" + myEntity.Name + "
    ");//Name:Jude
                Response.Write(myEntityAttr.PropertyNameFor(it => it.Age) + ":" + myEntity.Age + "
    ");//Age:11
                //出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!
                Response.Write(myEnumAttr.NameFor(MyEnum.America) + ":" + MyEnum.America + "
    ");//美洲:America
                Response.Write(myEnumAttr.NameFor(MyEnum.Asia) + ":" + MyEnum.Asia + "
    ");//亚洲:Asia
                Response.Write(myEnumAttr.NameFor(MyEnum.Europe) + ":" + MyEnum.Europe + "
    ");//欧洲:Europe
        
            }
        }
  • 相关阅读:
    终于找到了一本PYTHON的中文书籍
    深圳测试协会第二次活动顺利举行
    Peer review
    如何在LINUX/UNIX上运行PYTHON程序
    CMMI各级关注的过程域(原创)
    深圳测试协会第三次活动顺利结束
    深圳测试沙龙第二期活动园满结束
    51testing软件测试沙龙
    sql中使用游标
    关于Asp.net 页面动态加载用户控件,出现“未能加载视图状态”的原因[续]
  • 原文地址:https://www.cnblogs.com/ahjesus/p/3363015.html
Copyright © 2011-2022 走看看