.net 手写实现一个简单实体数据验证
Posted 碌云
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.net 手写实现一个简单实体数据验证相关的知识,希望对你有一定的参考价值。
源于一次面试中的面试题,代码如下所示:
public class Product { public string Name { get; set; } public string Description { get; set; } public void Validate1() { if (string.IsNullOrEmpty(this.Name)) { throw new Exception("请输入名称"); } if (string.IsNullOrEmpty(this.Description)) { throw new Exception("产品描述不能为空"); } } public void Validate2() { this.Require(x => x.Name, "请输入名称"); this.Require(x => x.Description, "产品描述不能为空"); } }
要求就是实现这个Require的方法来达到和Validate1方法一样的效果。
方法一,Func实现:
private void Require(Func<Product, string> p, string v) { string value = p(this); //也可以:string value = p.Invoke(this); if (string.IsNullOrEmpty(value)) { throw new Exception(v); } }
方法二,Expression<Func>实现:
private void Require(Expression<Func<Product, string>> p, string v) { string value = p.Compile()(this); if (string.IsNullOrEmpty(value)) { throw new Exception(v); } }
这个题目算是完成了,其实我原本也不会这样玩的,多亏了QQ群867095512里的大佬啊[滑稽]
当然话说回来,实体验证这种东西虽然自己造轮子能提升代码能力,不过还是建议用业内成熟的轮子,比如mvc自带的模型验证或者FluentValidation框架这种轮子。
以上是关于.net 手写实现一个简单实体数据验证的主要内容,如果未能解决你的问题,请参考以下文章