利用反射检查对象属性是否满足正则特
2015-04-15 19:21
267 查看
有时对象的属性需要满足某些正则,若是单独创建方法去一个个验证这些正则太过麻烦,这时我们可以给属性添加正则特性,如下:
可是有时候对象实例的生成会绕过这些正则检查,例如直接从Excel里数据流写成对象。我们可以在数据流生成对象时候利用发射来检查生成对象是否满足正则表达。
测试结果:
抛出异常:
public class student { [RegularExpression(@"^[a-zA-Z]{1,20}$", ErrorMessage = "英文姓名必须是英文字符,且长度小于20!")] public string EName { get; set; } }
可是有时候对象实例的生成会绕过这些正则检查,例如直接从Excel里数据流写成对象。我们可以在数据流生成对象时候利用发射来检查生成对象是否满足正则表达。
public static void ValidateInstatnce<T>(T t) { var objectT = Activator.CreateInstance<T>(); var propertyInfoList = objectT.GetType().GetProperties(); foreach (var property in propertyInfoList) { var proValue = property.GetValue(t,null); var attars = property.GetCustomAttributes(); foreach (var attar in attars) { try { var validateAttar = attar as ValidationAttribute; if (validateAttar!=null) { //Null对象绕过正则检查,不会抛错,情理之中. validateAttar.Validate(proValue ,property.Name); } } catch (Exception e) { if (e is ValidationException) { throw; } } } } }
测试结果:
public static void test() { try { var stu = new student { EName = "123" }; ValidateInstatnce<student>(stu); } catch (Exception e) { throw e; } } }
抛出异常:
英文姓名必须是英文字符,且长度小于20!
相关文章推荐
- C#利用反射来判断对象是否包含某个属性的实现方法
- C#利用反射来判断对象是否包含某个属性的实现方法
- C#利用反射来判断对象是否包含某个属性的实现方法
- C# 中利用反射机制拷贝类的字段和属性(拷贝一个类对象的所有东西付给另一个类对象,而不是付给引用地址)
- 利用反射对对象属性赋值取值操作
- Java记录 -88- 利用反射机制调用对象的私有方法和属性
- property_exists 检查对象或类是否具有该属性
- java利用反射技术遍历某个对象的属性及属性值
- 利用反射取得类中属性(引用及非引用数据类型)及设置该类实例化对象的属性值
- 利用反射获取实例化后的对象的属性及其属性值
- 【初学笔记】利用反射、泛类思想操作对象的属性和方法的一种方案
- 利用Java反射根据属性名获取对象值和类型代码
- 【JavaScript】利用正则表达式检查输入框输入的是否为网址
- 利用正则表达式检查网址,手机号,邮箱是否正确(RegexKitLite)
- Java记录 -88- 利用反射机制调用对象的私有方法和属性
- 利用Java反射实现JavaBean对象相同属性复制并初始化目标对象为空的属性的BeanUtils
- $.isEmptyObject():检查对象是否为空(不包含任何属性)。
- 利用反射打印对象所有属性的工具类
- 泛型约束和利用反射修改对象属性的值
- PHP property_exists 检查对象或类是否具有该属性