标签AttributeUsage 使用
[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 使用相关推荐
- .NET Core 反射获取所有控制器及方法上特定标签
有个需求,就是在. NET Core中,我们想在项目 启动时,获取LinCmsAuthorizeAttribute这个特性标签所有出现的地方,把他的参数,放入一个集合并缓存起来,以便后面使用此数据用于 ...
- .net core 获取机器码_.NET Core 反射获取所有控制器及方法上特定标签
有个需求,就是在. NET Core中,我们想在项目 启动时,获取LinCmsAuthorizeAttribute这个特性标签所有出现的地方,把他的参数,放入一个集合并缓存起来,以便后面使用此数据用于 ...
- c# AttributeUsage的自定义属性和反射的一些基本用法
定义一个AttributeUsage 定义一个Person属性上面声明AttributeUsage类 new Person转换成 PropertyInfo集合 通过GetCustomAttribute ...
- Go 知识点(18)— 条件编译(编译标签、文件后缀)
1. 条件编译 Go 能根据所处环境选择对应的源码进行编译.让编译器只对满足条件的代码进行编译,将不满足条件的代码舍弃,这就叫做条件编译. 在 Go 中,也称之为 Build Constraints ...
- Git 常用操作(2)- 创建标签
1. 列出标签 在 Git 中列出已有的标签是非常简单直观的.只需要输入 git tag: $ git tag v0.1 v1.3 2. 创建标签 Git 使用两种主要类型的标签:轻量标签(light ...
- Docker 入门系列(2)- Docker 镜像, 免 sudo 使用 docker 命令、获取查看、修改镜像标签、查找删除创建镜像、导入导出镜像
1. 免 sudo 使用 docker 命令 如果还没有 docker group 就添加一个 sudo groupadd docker 将用户加入该 group 内 sudo gpasswd -a ...
- JSTL标签库学习笔记
JSTL概述 apache的东西,依赖于EL 使用jstl需要导入jstl.jar包 标签库 core 核心标签库 fmt 格式化标签库 sql 数据库标签库,过时 xml xml标签库,过时 JST ...
- jquery过滤HTML标签方法
//过滤HTML标签 function removeHTMLTag(str) {str = str.replace(/<\/?[^>]*>/g, ''); //去除HTML tags ...
- BCELoss BCEWithLogitsLoss 多标签损失函数
BCELoss 在图片多标签分类时,如果3张图片分3类,会输出一个3*3的矩阵. 先用Sigmoid给这些值都搞到0~1之间: 假设Target是: emmm应该是我上面每次都保留4位小数,算到最后误 ...
最新文章
- mysql mtq_mysql基本操作 - osc_r3mtqivi的个人空间 - OSCHINA - 中文开源技术交流社区
- Go 语言开发第一天,我的学习之路从这里开始
- codevs1040 统计单词个数
- oracle sqlldr (一) 最基本语法
- 华为薪资等级结构表_华为21级程序员月薪曝光:月薪27w,什么概念!程序员中的战斗机...
- word20161206
- iOS App图标和启动画面尺寸
- 电子信息计算机调剂到能源动力,江苏科技大学机械、电子信息、电子信息能源动力、土木水利2020年考研调剂信息...
- Brownie Slicing(二分枚举答案)
- python pos函数_从0入门Python — 4. 函数
- appscan无法连接到服务器_GTA5无法连接R星服务器怎么解决?无法连接解决方法
- 华为交换机和路由器命令和trunk
- 1362:家庭问题(family)
- 分析方法--FMEA,6sigma,脑力激荡法
- 基于GEE黑龙江省大宗农作物空间分布(注释+全套代码)
- 如何解决因涉及不良信息导致QQ互联审核不通过?
- k歌打分原理php,全民K歌修音教程:想要获得SSS评分其实很简单
- Oracle卸载的全过程
- 怎样用Java求水仙花数和水仙花数的数量
- 2015年Android作品集