1、C#通过反射获取类自定义特性描述列表OO 真的是个有趣的东西,我们都知道,创建类的时候,我们可以声明属性(property)、字段(field)等,而特性(Attribute)为人注意。在.NET 中,特性使用,可分 为.NET 自带特性(如Description)和自定义特性。由于需求需要,本人粗浅研究了一下自定义特性的使用,下面就返回类的自定义特性描述列表进行梳理。自定义特性类:public class ImportHeaderAttribute : System.Attributepublic string ImportHeader get; set; public int Index
2、get; set; public ImportHeaderAttribute(string header, int index)ImportHeader = header;Index = index;获取类自定义特性描述列表方法:/ / 获取类自定义特性描述列表/ / 目标类/ 自定义特性类/ 自定义特性/ 排序特性(升序),默认 null 不排序/ 返回类自定义特性描述列表,Key: 属性 (字段),value:特性描述public static IList GetDescriptionList(string cusName, string index = null)tryList clas
3、sList = new List();List indexList = new List();string key = string.Empty;string value = string.Empty;#region 循环目标类属性foreach (PropertyInfo pro in typeof(T).GetProperties()/循环目标类属性 var attridures = pro.GetCustomAttributes(typeof(A), true);/自定义特性集合key = pro.Name;A a = default(A);foreach (object att in
4、attridures)a = (A)att;/转换为自定义特性类对象var aInfo = a.GetType().GetProperty(cusName);/获取对应特性的属性对象if (aInfo != null)value = aInfo.GetValue(a).ToString();classList.Add(new KeyValuePair(key, value);/赋值 if (!string.IsNullOrEmpty(index)var aInfo2 = a.GetType().GetProperty(index);if (aInfo2 != null)value = aInf
5、o2.GetValue(a).ToString();indexList.Add(new KeyValuePair(key, value);#endregion#region 循环目标类字段foreach (FieldInfo Field in typeof(T).GetFields()var attridures = Field.GetCustomAttributes(typeof(A), true);/自定义特性集合key = Field.Name;A a = default(A);foreach (object att in attridures)a = (A)att;/转换为自定义特性类
6、对象var aInfo = a.GetType().GetProperty(cusName);/获取对应特性的属性对象if (aInfo != null)value = aInfo.GetValue(a).ToString();classList.Add(new KeyValuePair(key, value);/赋值 if (!string.IsNullOrEmpty(index)var aInfo2 = a.GetType().GetProperty(index);if (aInfo2 != null)value = aInfo2.GetValue(a).ToString();indexL
7、ist.Add(new KeyValuePair(key, value);#endregionif (classList.Count = indexList.Count)indexList = indexList.OrderBy(x = x.Value).ToList();List orderList = new List();foreach (var item in indexList)orderList.Add(classList.FirstOrDefault(x = string.Equals(x.Key, item.Key);return orderList;return classList;catch (Exception ex)return new List();完。