特性Attribute的简单用法

一、建立一个自定义的Attribute类

注:类名+Attribute,类需要继承Attribute

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/// <summary>
/// 特性
/// </summary>
public class SensitiveFileTypeAttribute : Attribute
{
    /// <summary>
    /// 字段类型
    /// </summary>
    public SensitiveFileTypeEnum FileType { get; set; }
 
    public SensitiveFileTypeAttribute(SensitiveFileTypeEnum fileType)
    {
        FileType = fileType;
    }
 
}
 
/// <summary>
/// 字段类型枚举
/// </summary>
public enum SensitiveFileTypeEnum
{
 
    /// <summary>
    /// 单价
    /// </summary>
    Price = 1,
    /// <summary>
    /// 金额
    /// </summary>
    Amount = 2,
    /// <summary>
    /// 折扣
    /// </summary>
    Discount = 3
 
}

  二、简单在属性上面使用特性:

    属性上面标注特性:[特性名(特性值)]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class SaleSoDtlDto
    {
        /// <summary>
        /// 数量
        /// </summary>
        public int Qty { get; set; }
 
        /// <summary>
        /// 折扣
        /// </summary>
        [SensitiveFileType(SensitiveFileTypeEnum.Discount)]
        public decimal Discount { get; set; }
 
     
        /// <summary>
        /// 未税本币结算价
        /// </summary>
        [SensitiveFileType(SensitiveFileTypeEnum.Price)]
        public decimal SettlementPrice { get; set; }
            
 
        /// <summary>
        /// 含税本币结算金额
        /// </summary>
        [SensitiveFileType(SensitiveFileTypeEnum.Amount)]
        public decimal TaxSettlementAmount { get; set; }
          
 
    }

  

三、获取某一个类上面有某特性的所有属性:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/// <summary>
/// 导出敏感字段
/// </summary>
public static class SensitiveFileAppService
{
    /// <summary>
    /// 使用反射找出某一个类有标记某特性的属性
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public static List<PropertyInfo> GetSensitiveFileList<T>() where T : class, new()
    {
        List<PropertyInfo> proList = new List<PropertyInfo>();
 
        var properties = typeof(T).GetProperties();
        if (properties == null || !properties.Any()) return proList;
 
        foreach (PropertyInfo p in properties)
        {
            var name = p.Name;//属性名称
 
            var attribute = p.GetCustomAttribute<SensitiveFileTypeAttribute>();
            if (attribute == null) continue//当前属性是否有SensitiveFileTypeAttribute特性 为NULL就没有此属性
 
            var fileType = attribute.FileType;//特性的FileType属性值
 
            proList.Add(p);
 
        }
 
        return proList;
 
    }
 
}

  

1
2
3
4
5
public void TestWay()
       {
 
           var proList = SensitiveFileAppService.GetSensitiveFileList<SaleSoDtlDto>();
       }

  

posted @   姚小丹  阅读(87)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示