zoukankan      html  css  js  c++  java
  • .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框架这种轮子。

  • 相关阅读:
    uniGUI之uniEdit(23)
    ​Shiro授权
    Shiro密码重试次数限制
    Ehcache基础入门
    Shiro简单加密服务
    Shiro身份验证
    第二章、Web中使用shiro(实现登陆)
    第一章、认识Shiro
    使用IntelliJ/Eclipse生成类图
    Jedis操作Redis实例
  • 原文地址:https://www.cnblogs.com/cluyun/p/11588275.html
Copyright © 2011-2022 走看看