当前位置: 首页 > news >正文

一个简单的通用验证类的实现

进园子三年多了,从来都只是看各位大神的文章,而没有写过,今天心血来潮来写一篇,本人水平略浅,写得不好勿见怪,大神勿喷

首先定义一个验证类型枚举,这里只列出最简单的两种验证类型

 1     /// <summary>
 2     /// 验证类型枚举
 3     /// </summary>
 4     public enum ValidateType
 5     {
 6         /// <summary>
 7         /// 不为NULL验证
 8         /// </summary>
 9         NotNullValidate,
10         /// <summary>
11         /// 不为空验证
12         /// </summary>
13         NotNullOrEmptyValidate
14     }


然后再定义每个验证类型对应的验证方法,验证类型对应的方法名一致

 1         /// <summary>
 2         /// 不为NULL验证
 3         /// </summary>
 4         /// <param name="value"></param>
 5         /// <returns></returns>
 6         public static bool NotNullValidate(object value)
 7         {
 8             if (value is DBNull)
 9                 return false;
10             return value == null ? false : true;
11         }
12 
13         /// <summary>
14         /// 不为空验证
15         /// </summary>
16         /// <param name="value"></param>
17         /// <returns></returns>
18         public static bool NotNullOrEmptyValidate(object value)
19         {
20             if (value is DBNull)
21                 return false;
22             if (value == null)
23                 return false;
24             return string.IsNullOrEmpty(value.ToString()) ? false : true;
25         }

 

方法定义完之后就是调用了,这里我写了一个通用的调用方法

 1         /// <summary>
 2         /// 验证object值
 3         /// </summary>
 4         /// <param name="value"></param>
 5         /// <param name="validateType"></param>
 6         /// <returns></returns>
 7         public static bool ValidateObject(object value,ValidateType validateType)
 8         {
 9             ValidateUtil validateObj=new ValidateUtil();
10 
11             //反射获取验证类型对应的验证方法
12             MethodInfo method = validateObj.GetType().GetMethod(validateType.ToString());
13             if (method == null)
14                 throw new Exception("没有找到此验证类型对应的验证方法:" + validateType.ToString());
15 
16             return (bool)method.Invoke(validateObj, new object[] { value });
17         }


在这基础上我扩展了一个实体类的验证

 

 1         /// <summary>
 2         /// 验证实体类中某些字段
 3         /// </summary>
 4         /// <param name="objEntity">实体类</param>
 5         /// <param name="validateFields">Dictionaty 需要验证的字段名,验证类型枚举</param>
 6         /// <returns></returns>
 7         public static bool ValidateEntity(object objEntity,Dictionary<string,ValidateType> validateFields)
 8         {
 9             PropertyInfo[] property = objEntity.GetType().GetProperties();
10             foreach (PropertyInfo field in property)
11             {
12                 object value = field.GetValue(objEntity, null);
13 
14                 if (validateFields != null && validateFields.ContainsKey(field.Name))
15                     if (!ValidateUtil.ValidateObject(value, validateFields[field.Name]))
16                         throw new Exception(field.Name + ""+validateFields[field.Name].ToString()+"验证未通过!");
17             }
18             return true;
19         }

到此就算完了,谢谢

转载于:https://www.cnblogs.com/C0DE-MONKEY/p/4711179.html

相关文章:

  • ZOJ-3987 Numbers 2017CCPC秦皇岛站G题 (二进制乱搞、贪心)
  • iOS开发-类簇(Class Cluster)
  • HDU-1350 Taxi Cab Scheme(最小路径覆盖)
  • codeforces-884D Boxes And Balls(思维、三叉哈夫曼树)
  • 设置c++程序的堆栈空间解决栈溢出问题
  • POJ-1932 XYZZY(判正权环路+Warlshell传递闭包)
  • Codeforces 827C DNA Evolution(多维树状数组)
  • larbin是一种开源的网络爬虫/网络蜘
  • Codeforces 855E Salazar Slytherin's Locket(数位dp)
  • JAVA爬虫 WebCollector
  • HDU-6215 Brute Force Sorting(思维、模拟链表)
  • HDU-1719 Friend(公式化简)
  • js如何获取微信版本号
  • HDU-4664 Triangulation(博弈SG打表+类似凸包性质)
  • asp。net5的依赖注入
  • 《深入 React 技术栈》
  • Apache的80端口被占用以及访问时报错403
  • C++11: atomic 头文件
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • express + mock 让前后台并行开发
  • javascript 哈希表
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • MySQL几个简单SQL的优化
  • ng6--错误信息小结(持续更新)
  • Python学习之路16-使用API
  • vue--为什么data属性必须是一个函数
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 编写符合Python风格的对象
  • 第2章 网络文档
  • 读懂package.json -- 依赖管理
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 判断客户端类型,Android,iOS,PC
  • 使用common-codec进行md5加密
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 小程序01:wepy框架整合iview webapp UI
  • 走向全栈之MongoDB的使用
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (三分钟)速览传统边缘检测算子
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (转载)从 Java 代码到 Java 堆
  • ./configure、make、make install 命令
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .net反编译的九款神器
  • .NET开发者必备的11款免费工具
  • .php文件都打不开,打不开php文件怎么办
  • @Autowired自动装配
  • @Builder用法
  • []C/C++读取串口接收到的数据程序
  • [2013][note]通过石墨烯调谐用于开关、传感的动态可重构Fano超——