c# -反射获取自定义特性

Posted 微浅析

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# -反射获取自定义特性相关的知识,希望对你有一定的参考价值。

  1. 新建自定义特性

    新建TexinAttribute类 主要给value属性,下面获取value

   //继承特性Attribute类 public class TexinAttribute : Attribute { public string _value; //无参构造函数 public TexinAttribute() {
} //有参构造函数,主要获取传入的value public TexinAttribute(string value) { _value = value; } }

2.实体类

UserInfo实体类 

给Name属性 自定义特性
其他属性不做处理

 class UserInfo { [JsonProperty(NullValueHandling = NullValueHandling.Ignore, DefaultValueHandling = DefaultValueHandling.Include)] public int Id { get; set; } [Texin("momo")]//自定义 [JsonProperty(DefaultValueHandling = DefaultValueHandling.Include, NullValueHandling = NullValueHandling.Ignore)] public string Name { get; set; } [JsonIgnore]//忽略 [JsonProperty("Desc")]//替换序列化名 public string PassWord { get; set; } }

3.获取

利用反射获取所有属性 然后筛选带有自定义特性的属性,

输出特性传入的value

下面是打输出不带自定义特性TexinAttribute的其他所有属性

 static void Main(string[] args) { UserInfo userInfo = new UserInfo(); Console.WriteLine("Hello World!"); MemberInfo[] memberInfo = userInfo.GetType().GetMember("Name"); var sss= memberInfo[0].GetCustomAttributes(typeof(TexinAttribute), false); PropertyInfo[] propertys = typeof(UserInfo).GetProperties();//返回FirstClass的所有公共属性
object[] objAttrs; foreach (var item in propertys) { objAttrs = item.GetCustomAttributes(typeof(TexinAttribute), false);//获取自定义特性 foreach (TexinAttribute tt in objAttrs) { Console.WriteLine(tt._value); //获取自定义特性传入值 }
} #region 不带自定义特性的属性 Func<PropertyInfo, bool> func = (x) => !(x.GetCustomAttributes(typeof(TexinAttribute), false).Length > 0); var res = propertys.Where(func).Select(x => x.Name).ToList(); foreach (var item in res) {            //遍历输出不带TexinAttribute特性的属性 Console.WriteLine(item + "333"); } #endregion Console.ReadLine(); }

以上是关于c# -反射获取自定义特性的主要内容,如果未能解决你的问题,请参考以下文章

C#进阶C# 匿名方法

C#进阶C# 多线程

C# 教程

用 C# 编写 C# 编译器,先有鸡还是先有蛋?

C#第一篇——了解

C#第一篇——了解