后端开发|C#.Net教程
csharp,.net,简化
后端开发-C#.Net教程
彩虹网络任务源码,vscode代码是红色,ubuntu 15 qq,tomcat升级技术手册,爬虫porhub,php laravel框架,观澜seo推广公司,二手手机网站代码,网页动态菜单模板下载lzw
假设现在有一个学生类(Student)
手机版 音乐网站源码,vscode鼠标点击插件,ubuntu 插u盘,tomcat 防ddos,sqlite 破解,网页设计的div如何置顶,织梦数据库链接失败密码是正确的,服务器iis添加网站,android 桌面插件 源码,前端单体框架,衣服有爬虫,php 写入文件换行,seo优化一年多少钱,springboot时间化,动易标签模板,网站顶部加载进度条,易语言取数网页填表,bootstrap前端模板教程,网站上传服务器后台上传资料出错,html 淘宝静态登录页面模板,商店管理系统源文件,新闻发布php程序lzw
织梦贷款网站源码,ubuntu怎么删除空格,怎么配置tomcat6,大专学爬虫,.php是什么格式,新建区一站式seo优化lzw
{ { name =Age { ; Address { ;
如果需要判断某些字段(属性)是否为空,是否大于0,便有以下代码:
public static string ValidateStudent(Student student) { StringBuilder validateMessage = new StringBuilder(); if (string.IsNullOrEmpty(student.Name)) {validateMessage.Append("名字不能为空"); } if (string.IsNullOrEmpty(student.Sex)) {validateMessage.Append("性别不能为空"); } if (student.Age <= 0) {validateMessage.Append("年龄必填大于0"); } //...... 几百行 // 写到这里发现不对啊,如果必填项有20多个,难道我要一直这样写吗! return validateMessage.ToString(); }
这样的代码,重用性不高,而且效率低。
我们可以用特性,反射,然后遍历属性并检查特性。
首先自定义一个【必填】特性类,继承自Attribute
///public sealed class RequireAttribute : Attribute { private bool isRequire; public bool IsRequire { get { return isRequire; } } /// /// public RequireAttribute(bool isRequire) { this.isRequire = isRequire; } }
然后用这个自定义的特性标记学生类的成员属性:
///public class Student { /// private string name; [Require(true)] public string Name { get { return name; } set { name = value; } } /// [Require(true)] public int Age { get; set; } /// [Require(false)] public string Address { get; set; } /// [Require(true)] public string Sex; }
通过特性检查类的属性:
/// /// /// /// public static string CheckRequire(T instance) {var validateMsg = new StringBuilder();//获取T类的属性 Type t = typeof (T); var propertyInfos = t.GetProperties(); //遍历属性 foreach (var propertyInfo in propertyInfos) { //检查属性是否标记了特性RequireAttribute attribute = (RequireAttribute) Attribute.GetCustomAttribute(propertyInfo, typeof (RequireAttribute));//没标记,直接跳过if (attribute == null){ continue;}//获取属性的数据类型var type = propertyInfo.PropertyType.ToString().ToLower();//获取该属性的值var value = propertyInfo.GetValue(instance);if (type.Contains("system.string")){ if (string.IsNullOrEmpty((string) value) && attribute.IsRequire) validateMsg.Append(propertyInfo.Name).Append("不能为空").Append(",");}else if (type.Contains("system.int")){ if ((int) value == 0 && attribute.IsRequire) validateMsg.Append(propertyInfo.Name).Append("必须大于0").Append(",");} } return validateMsg.ToString(); }
执行验证:
static void Main(string[] args) { var obj = new Student() {Name = "" }; Console.WriteLine(CheckRequire(obj)); Console.Read(); }
结果输出:
有人会发现,Sex也标记了[Require(true)],为什么没有验证信息,这是因为,Sex没有实现属性{ get; set; },GetProperties是获取不到的