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[] 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[]).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 = ;
}
[Name("姓名")]
public string Name { get; set; }
[Name("年龄")]
public int Age { get; set; }
}
    public enum MyEnum {
[Name("欧洲")]
Europe = ,
[Name("亚洲")]
Asia = ,
[Name("美洲")]
America =
}

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 + "\n");//姓名:Jude
Response.Write(myEntityAttr.NameFor(it => it.Age) + ":" + myEntity.Age + "\n");//年龄:11
Response.Write(myEntityAttr.PropertyNameFor(it => it.Name) + ":" + myEntity.Name + "\n");//Name:Jude
Response.Write(myEntityAttr.PropertyNameFor(it => it.Age) + ":" + myEntity.Age + "\n");//Age:11
//出自http://www.cnblogs.com/ahjesus 尊重作者辛苦劳动成果,转载请注明出处,谢谢!
Response.Write(myEnumAttr.NameFor(MyEnum.America) + ":" + MyEnum.America + "\n");//美洲:America
Response.Write(myEnumAttr.NameFor(MyEnum.Asia) + ":" + MyEnum.Asia + "\n");//亚洲:Asia
Response.Write(myEnumAttr.NameFor(MyEnum.Europe) + ":" + MyEnum.Europe + "\n");//欧洲:Europe }
}

Ahjesus获取自定义属性Attribute或属性的名称的更多相关文章

  1. JS DOM属性,包括固有属性和自定义属性,以及属性获取、移除和设置

    属性分为固有属性property和自定义属性attribute 固有属性查看 固有属性可以通过ele.property 来获取,自定义属性不行 <!DOCTYPE html> <ht ...

  2. 【转】C#通过Expression获取指定属性的名称

    原文:http://www.cnblogs.com/powerwu/articles/3393582.html 大家所熟悉的是通过对象属性来访问该属性的值,或是由字符串通过反射来获取属性,并取值.今天 ...

  3. c# 获取某个对象的[公有属性]的名称,类型,值

    /// <summary> /// 获取某个对象的[公有属性]的名称,类型,值 /// </summary> /// <typeparam name="T&qu ...

  4. 获取JSON对象的属性名称

    1.问题背景 一个json对象,是以键值对组成,通过循环json对象,获取json对象中的属性名称 2.实现源码 <!DOCTYPE html PUBLIC "-//W3C//DTD ...

  5. 通过属性集名称获取属性集id

    Mage::getModel('eav/entity_attribute_set')->load('属性集名称', 'attribute_set_name')->getAttributeS ...

  6. C# 自定义属性Attribute

    自定义属性 /// <summary> /// 脱敏属性 /// </summary> public class SensitiveAttribute:Attribute { ...

  7. ZeroMQ接口函数之 :zmq_getsockopt – 获取ZMQ socket的属性

    ZeroMQ API 目录 :http://www.cnblogs.com/fengbohello/p/4230135.html 本文地址 :http://www.cnblogs.com/fengbo ...

  8. 福利->KVC+Runtime获取类/对象的属性/成员变量/方法/协议并实现字典转模型

    我们知道,KVC+Runtime可以做非常多的事情.有了这个,我们可以实现很多的效果. 这里来个福利,利用KVC+Runtime获取类/对象的所有成员变量.属性.方法及协议: 并利用它来实现字典转模型 ...

  9. jquery】常用的jquery获取表单对象的属性与值

    [jquery]常用的jquery获取表单对象的属性与值 1.JQuery的概念 JQuery是一个JavaScript的类库,这个类库集合了很多功能方法,利用类库你可以用一些简单的代码实现一些复杂的 ...

随机推荐

  1. sql2008清空日志

    USE[master] GO ALTER DATABASE MeSizeSNS SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE MeSizeSNS ...

  2. 【经验谈】XmlSerializer的坑

    XmlSerializer我想现在用的人可能不多了,大家都在用Json.我现在所在的公司依然在用,所以发现了这个坑.当然这个坑存在很久了只是没用过所以才发现. 事情是这样的,测试那边说系统偶尔会报找不 ...

  3. C++ string 用法详解

    /////////////////////////////////////////////////////////////////////////////////// 任何人对本文进行引用都要标明作者 ...

  4. Ip 地址

    访问 ip.mayfirst.org可以显示你的ip地址,如果你可以联网的话.

  5. 【PRML读书笔记-Chapter1-Introduction】1.4 The Curse of Dimensionality

    维数灾难 给定如下分类问题: 其中x6和x7表示横轴和竖轴(即两个measurements),怎么分? 方法一(simple): 把整个图分成:16个格,当给定一个新的点的时候,就数他所在的格子中,哪 ...

  6. Marven笔记贴

    本篇只是作为自学Marven的笔记贴,基本上都是网上的各种资料的汇总,方便自己和需要的人,不用一个个去找浪费时间了. 什么是Marven You want to start with a projec ...

  7. 个人对joomla3.2x和joomla2.5X浅薄看法

    很久没有写joomla文章了,发现想写的东西还是挺多的,后面抽时间补回来,其实更多还是php的一些东西.joomla3.0以后系统改变挺大,后台都是用bootstrap作为主题,个人对这个无爱,因为他 ...

  8. Android通过编码实现GPS开关

    在Android 2.2以后才可使用 import android.content.ContentResolver; import android.content.Context; import an ...

  9. JS思维之路菜鸟也能有大能量(2)--模拟数组合并concat

    我们有两个这样的数组 var arr1 = [1,2,3]; var arr2 = [4,5,6]; 任务:合并成这样,请至少提供两种思路. var arr1 = [1,2,3,4,5,6]; 思路一 ...

  10. 3.12----对potplayer的使用评价

    每一台电脑,除了最底层的操作的系统之外,对用户最重要的组成部分应该就是各类应用程序,毕竟人和计算机之间的交互说到底都是通过各类应用的来完成的,人通过利用这些应用程序来把各种问题转化为计算机可以理解的0 ...