>(body,inputExp,minLengthPExp);return final;Expression CreateDefaultResult(){var okMethod = typeof(ValidateResult).GetMethod(nameof(ValidateResult.Ok));Debug.Assert(okMethod != null, nameof(okMethod) + " != null");var methodCallExpression = Expression.Call(okMethod);var re = Expression.Assign(resultExp, methodCallExpression);/*** final as:* result = ValidateResult.Ok()*/return re;}Expression CreateValidateNameRequiredExpression(){var requireMethod = typeof(X03PropertyValidationTest03).GetMethod(nameof(ValidateStringRequired));var isOkProperty = typeof(ValidateResult).GetProperty(nameof(ValidateResult.IsOk));Debug.Assert(requireMethod != null, nameof(requireMethod) + " != null");Debug.Assert(isOkProperty != null, nameof(isOkProperty) + " != null");var requiredMethodExp = Expression.Call(requireMethod, nameNameExp, namePropExp);var assignExp = Expression.Assign(resultExp, requiredMethodExp);var resultIsOkPropertyExp = Expression.Property(resultExp, isOkProperty);var conditionExp = Expression.IsFalse(resultIsOkPropertyExp);var ifThenExp =Expression.IfThen(conditionExp,Expression.Return(returnLabel, resultExp));var re = Expression.Block(new[] {resultExp},assignExp,ifThenExp);/*** final as:* result = ValidateNameRequired("Name", input.Name);* if (!result.IsOk)* {*return result;* }*/return re;}Expression CreateValidateNameMinLengthExpression(){var minLengthMethod =typeof(X03PropertyValidationTest03).GetMethod(nameof(ValidateStringMinLength));var isOkProperty = typeof(ValidateResult).GetProperty(nameof(ValidateResult.IsOk));Debug.Assert(minLengthMethod != null, nameof(minLengthMethod) + " != null");Debug.Assert(isOkProperty != null, nameof(isOkProperty) + " != null");var requiredMethodExp = Expression.Call(minLengthMethod,nameNameExp,namePropExp,minLengthPExp);var assignExp = Expression.Assign(resultExp, requiredMethodExp);var resultIsOkPropertyExp = Expression.Property(resultExp, isOkProperty);var conditionExp = Expression.IsFalse(resultIsOkPropertyExp);var ifThenExp =Expression.IfThen(conditionExp,Expression.Return(returnLabel, resultExp));var re = Expression.Block(new[] {resultExp},assignExp,ifThenExp);/*** final as:* result = ValidateNameMinLength("Name", input.Name, minLength);* if (!result.IsOk)* {*return result;* }*/return re;}}}catch (Exception e){Console.WriteLine(e);throw;}}[Test]public void Run(){// see code in demo repo}public static ValidateResult Validate(CreateClaptrapInput input){return _func.Invoke(input, 3);}public static ValidateResult ValidateStringRequired(string name, string value){return string.IsNullOrEmpty(value)? ValidateResult.Error($"missing {name}"): ValidateResult.Ok();}public static ValidateResult ValidateStringMinLength(string name, string value, int minLength){return value.Length < minLength? ValidateResult.Error($"Length of {name} should be great than {minLength}"): ValidateResult.Ok();}}}代码要点:
- 正如前文所述 , 我们修改了 ValidateNameRequired, 并重命名为 ValidateStringRequired 。ValidateNameMinLength -> ValidateStringMinLength 。
推荐阅读
-
宝如的口琴:金妍儿再度上榜,最后这一位美若天仙,世界体坛最美的四位运动员
-
虫子爱搞笑|特别的痒不好受,开心一笑:朋友说经常听别人说脚冻了
-
「视频」外媒发布2019年视频APP全球占比排行榜,前十名中国占六位
-
-
谊赫|改装高顶克蒂圣母峰款,2020新款奔驰V260L商务车
-
[传染病]美国报告首例死亡病例,华盛顿或现全美首个疫情大暴发
-
-
-
-
高铁|浙江最“落后”的城市,至今没有通高铁,GDP全省倒数
-
2020上半年中国智能手机出货|2020上半年中国智能手机出货近2.5亿台,5G占25.6%
-
红宝石多肉叶片紧凑,给它保证3点做足,养出最“红火”的状态
-
带男孩的二婚女人,为什么不能娶,未婚女能嫁二婚带孩子的男人吗-
-
生活养生|【四季养生】秋分养生,你知道该注意些什么吗
-
-
法学:数理化实在太差!错误地选择了理科,这样的我上大学该学什么专业?
-
「红楼梦」《红楼梦》里,薛宝钗过生日,史湘云为什么闹脾气?
-
央视新闻客户端|当地限制居民浇花、洗车等,新西兰北岛大部分地区遭遇25年来最严重干旱
-
兵武说军情|屯兵已超过20万,印军究竟有什么意图?,印度一口气通过两笔拨款
-
『婷小姐』千元机别乱买,真正值得入手的是这4款!,原创