用途场景:通过自定义属性,可以获取到类的所有属性的特性值(可以理解为注释的值)。用For循环就能获取到,就避免了一个一个属性去获取。
//自定义特性类,必须继承Attribute类
public class DescAttribute : Attribute
{
public string Desc { get; set; }
public DescAttribute(string desc)
{
Desc = desc;
}
}
//创建一个Student测试类
public class Student
{
[Desc("工号")]
//[JsonProperty("MyTest")]
public int Id { get; set; }
[Desc("姓名")]
public string Name { get; set; }
[Desc("课程")]
public string Course { get; set; }
}
获取自定义特性具体方法:
/// <summary>
/// 根据属性获取自定义特性值
/// </summary>
/// <param name="objClass"></param>
/// <param name="propName"></param>
/// <returns></returns>
public static string GetDesc(object objClass, string propName)
{
var type = objClass.GetType();
var properties = type.GetProperties();
foreach (var item in properties)
{
var attrs = item.GetCustomAttributes(true);
if (item.Name == propName)
{
foreach (var attr in attrs)
{
if (attr is DescAttribute)
{
DescAttribute dbi = (DescAttribute)attr;
return dbi.Desc;
}
}
}
}
return string.Empty;
}
使用方法:
var stu = new Student() { Id = 1, Name = "Levi", Course = "abc" };
var desc = GetDesc(stu, nameof(stu.Course));
Console.WriteLine(desc);
Console.Read();
输出:
课程