>(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 。
推荐阅读
-
巡洋舰|俄军“瓦良格”号巡洋舰率舰队从日本附近驶过
-
游戏大妹子呀|真的是一个比一个女汉子,搞笑GIF:现在的小姐姐
-
-
数码钻研社惠普申请智能镜子专利 PC巨头也看好物联网了
-
张艺兴|与张艺兴发生争议后,布布及女友和王一博上节目,《天天向上》这期或被骂
-
具惠善|近20年来一直被低估的6部烧脑片,尤其是最后一部
-
“我撑不住了!”今早,杭州街头一孕妇突然急产,关键时刻一位大姐站了出来...
-
「罗云熙」32岁罗云熙撞上20岁王俊凯,同穿白色西装套装,原来不是年轻就能赢
-
-
-
-
[玉茹小姐姐]不料时髦有个性,还展现出“木柴腿”!,李沁把鞋带绑在脚上
-
【晨晨说科技】放在一起价值百万,单张价值数十万,三张罕见历史纸币
-
男子持棍暴打儿女拍视频给妻子看|令人发指!男子持棍暴打儿女拍视频给妻子看,木棍都被切断了
-
-
食品不得标注零添加等字样|食品不得标注零添加等字样 利民行动 食品安全加油!!
-
-
SUV▲8万块还买啥合资?号称“最美SUV”,7.18万起开出去迷倒一片
-
[办公室VS运动]阿圭罗:大部分人都怕染病传给家人,球员都想赛事重启?别搞笑了
-
手机大魔王华为手机副总裁提建议,贴膜和戴保护壳,将影响华为P40Pro拍照