[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]

三个参数  第一个是标签作用范围可以是类可以是属性AttributeTargets.Property。。。第二个参数用此标签的类可以用多个标签,第三个参数用此标签的类可不可以继承。

下面是对于属性的标签的使用

 [AttributeUsage(AttributeTargets.Property)]public class StringLengthAttribute: Attribute{private int _maximumLength;public StringLengthAttribute(int maximumLength){_maximumLength = maximumLength;}public int MaximumLength{get { return _maximumLength; }}}public class People{[StringLength(8)]public string Name { get; set; }[StringLength(15)]public string Description { get; set; }}public class ValidationModel{public void Validate(object obj){var t = obj.GetType();//由于我们只在Property设置了Attibute,所以先获取Propertyvar properties = t.GetProperties();foreach (var property in properties){//这里只做一个stringlength的验证,这里如果要做很多验证,需要好好设计一下,千万不要用if elseif去链接//会非常难于维护,类似这样的开源项目很多,有兴趣可以去看源码。if (!property.IsDefined(typeof(StringLengthAttribute), false)) continue;var attributes = property.GetCustomAttributes(true);foreach (var attribute in attributes){//这里的MaximumLength 最好用常量去做var maxinumLength = (int)attribute.GetType().GetProperty("MaximumLength").GetValue(attribute);//获取属性的值var propertyValue = property.GetValue(obj) as string;if (propertyValue == null)throw new Exception("exception info");//这里可以自定义,也可以用具体系统异常类if (propertyValue.Length > maxinumLength)throw new Exception(string.Format("属性{0}的值{1}的长度超过了{2}", property.Name, propertyValue, maxinumLength));}}}}

        private void button1_Click(object sender, EventArgs e){var people = new People(){Name = "qwadzc",Description = "desco;o;opo;po;po;oription"};try{new ValidationModel().Validate(people);}catch (Exception ex){Console.WriteLine(ex.Message);}Console.ReadLine();}

转载于:https://www.cnblogs.com/dzh1990/p/10154690.html

标签AttributeUsage 使用相关推荐

  1. .NET Core 反射获取所有控制器及方法上特定标签

    有个需求,就是在. NET Core中,我们想在项目 启动时,获取LinCmsAuthorizeAttribute这个特性标签所有出现的地方,把他的参数,放入一个集合并缓存起来,以便后面使用此数据用于 ...

  2. .net core 获取机器码_.NET Core 反射获取所有控制器及方法上特定标签

    有个需求,就是在. NET Core中,我们想在项目 启动时,获取LinCmsAuthorizeAttribute这个特性标签所有出现的地方,把他的参数,放入一个集合并缓存起来,以便后面使用此数据用于 ...

  3. c# AttributeUsage的自定义属性和反射的一些基本用法

    定义一个AttributeUsage 定义一个Person属性上面声明AttributeUsage类 new Person转换成 PropertyInfo集合 通过GetCustomAttribute ...

  4. Go 知识点(18)— 条件编译(编译标签、文件后缀)

    1. 条件编译 Go 能根据所处环境选择对应的源码进行编译.让编译器只对满足条件的代码进行编译,将不满足条件的代码舍弃,这就叫做条件编译. 在 Go 中,也称之为 Build Constraints ...

  5. Git 常用操作(2)- 创建标签

    1. 列出标签 在 Git 中列出已有的标签是非常简单直观的.只需要输入 git tag: $ git tag v0.1 v1.3 2. 创建标签 Git 使用两种主要类型的标签:轻量标签(light ...

  6. Docker 入门系列(2)- Docker 镜像, 免 sudo 使用 docker 命令、获取查看、修改镜像标签、查找删除创建镜像、导入导出镜像

    1. 免 sudo 使用 docker 命令 如果还没有 docker group 就添加一个 sudo groupadd docker 将用户加入该 group 内 sudo gpasswd -a ...

  7. JSTL标签库学习笔记

    JSTL概述 apache的东西,依赖于EL 使用jstl需要导入jstl.jar包 标签库 core 核心标签库 fmt 格式化标签库 sql 数据库标签库,过时 xml xml标签库,过时 JST ...

  8. jquery过滤HTML标签方法

    //过滤HTML标签 function removeHTMLTag(str) {str = str.replace(/<\/?[^>]*>/g, ''); //去除HTML tags ...

  9. BCELoss BCEWithLogitsLoss 多标签损失函数

    BCELoss 在图片多标签分类时,如果3张图片分3类,会输出一个3*3的矩阵. 先用Sigmoid给这些值都搞到0~1之间: 假设Target是: emmm应该是我上面每次都保留4位小数,算到最后误 ...

最新文章

  1. mysql mtq_mysql基本操作 - osc_r3mtqivi的个人空间 - OSCHINA - 中文开源技术交流社区
  2. Go 语言开发第一天,我的学习之路从这里开始
  3. codevs1040 统计单词个数
  4. oracle sqlldr (一) 最基本语法
  5. 华为薪资等级结构表_华为21级程序员月薪曝光:月薪27w,什么概念!程序员中的战斗机...
  6. word20161206
  7. iOS App图标和启动画面尺寸
  8. 电子信息计算机调剂到能源动力,江苏科技大学机械、电子信息、电子信息能源动力、土木水利2020年考研调剂信息...
  9. Brownie Slicing(二分枚举答案)
  10. python pos函数_从0入门Python — 4. 函数
  11. appscan无法连接到服务器_GTA5无法连接R星服务器怎么解决?无法连接解决方法
  12. 华为交换机和路由器命令和trunk
  13. 1362:家庭问题(family)
  14. 分析方法--FMEA,6sigma,脑力激荡法
  15. 基于GEE黑龙江省大宗农作物空间分布(注释+全套代码)
  16. 如何解决因涉及不良信息导致QQ互联审核不通过?
  17. k歌打分原理php,全民K歌修音教程:想要获得SSS评分其实很简单
  18. Oracle卸载的全过程
  19. 怎样用Java求水仙花数和水仙花数的数量
  20. 2015年Android作品集

热门文章

  1. 为什么要这么努力?努力是件美好的事
  2. ffmpeg中的http协议相关代码阅读笔记
  3. vue--实现todo案例
  4. 进程同步与互斥-------zjh
  5. 刘宇凡:【冬至的祝福】
  6. 发现Office系列中还有款财务管理软件Accounting
  7. WordPress上传图片提示:服务器无法处理图像
  8. C# WPF窗体设计器显示以及App.xaml文件打不开(VS 2022)
  9. 0x00 -- CSAPP -- 概览
  10. 【Bleak】三、扫描(指定设备地址)