>(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 。
推荐阅读
-
#眉儿美食TB#谷雨节气,不差钱的话多吃点这菜,错过等明年,和豆腐拌经典美味
-
扬子晚报|“QQ爱之真假老干妈”欢乐开唱 网友加戏“逗鹅冤”
-
2019北京“中国医师节”庆祝活动启幕 京东健康推出优医惠医福利平台
-
-
王者荣耀|《王者荣耀》重塑姜子牙:定位模糊不清 不被队友认可
-
全国党媒信息公共平台|南京人,2020南京文学季要来了
-
潮范君剃须洁面一站式搞定,体验olybo电动剃须刀A6s
-
「美国」救星来了!总统亲自去机场迎接中国专家组,美国这次不说话了
-
-
历史店|最贵替补?霍福德谈76人:能接受成为西蒙斯的替补,只要钱管够!
-
健身@为了帮助188.8斤姐姐减肥,弟弟全程监督,3个月看减肥效果
-
-
儿童|三个被改变的家庭 | 江西张玉环杀童案26年后再审
-
-
一个人想要重生要咋做,怎样破除半生的一切,然后像婴儿一样重建
-
西安晚报|他作出一个决定,庞贝病男孩662分考进南开!为回馈关爱
-
白问@单孔颜值好评,【旗舰】最香985?华为首款64MP真机上手视频
-
『北京天坛医院』父母孩子如何做到相看两不厌,【天坛科普】“神兽”在家
-
访派客动力CEO:“大数据安全岛”解决大数据安全的利器
-