c# -反射获取自定义特性
Posted 微浅析
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# -反射获取自定义特性相关的知识,希望对你有一定的参考价值。
新建自定义特性
新建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
{
[ ]
public int Id { get; set; }
[//自定义 ]
[ ]
public string Name { get; set; }
[//忽略 ]
[//替换序列化名 ]
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); //获取自定义特性传入值
}
}
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");
}
Console.ReadLine();
}
以上是关于c# -反射获取自定义特性的主要内容,如果未能解决你的问题,请参考以下文章