如何在用户输入项校验场景中减少冗余IF语句的使用
避免过多IF语句的表单校验优化方案
前置优化:精简冗余判断
你当前代码中的判断条件存在冗余,string.IsNullOrWhiteSpace本身已经包含了string.IsNullOrEmpty的判断逻辑(同时覆盖null、空字符串、全空白字符三种场景),可以先去掉多余的或条件,简化单个判断的代码。
优化方案1:校验规则集合遍历(最适配你当前场景的改法)
你所有的IF块逻辑高度同质化:判断字段合法性→ 提交标志设为false→ 对应校验提示开关打开,完全可以把校验规则抽成集合,统一遍历执行,改写后的代码如下:
// 定义校验规则集合,每个条目对应「待校验字段值 + 校验失败后的操作」 var validationRules = new List<(string inputValue, Action setInvalidLabel)> { (OldPasswordEntry, () => OldPasswordEntryValLabel = true), (NewPasswordEntry, () => NewPasswordEntryValLabel = true), (NewPasswordConfirmationEntry, () => NewPasswordConfirmationEntryValLabel = true) }; preparedToSubmit = true; // 遍历执行所有校验逻辑 foreach(var rule in validationRules) { if (string.IsNullOrWhiteSpace(rule.inputValue)) { preparedToSubmit = false; rule.setInvalidLabel(); } }
这种写法的优势是后续新增校验字段时,只需要往规则集合里新增一行配置即可,不需要重复写IF块,代码冗余度低,维护成本更低。
优化方案2:声明式校验(适合中大型项目)
如果是.NET生态下的项目,可以使用System.ComponentModel.DataAnnotations提供的数据注解能力做声明式校验,把校验规则以特性的方式标注在模型属性上,不需要手动编写每个字段的判断逻辑:
// 定义表单模型类 public class PasswordModifyModel { [Required(ErrorMessage = "旧密码不能为空")] public string OldPasswordEntry { get; set; } [Required(ErrorMessage = "新密码不能为空")] public string NewPasswordEntry { get; set; } [Required(ErrorMessage = "新密码确认不能为空")] public string NewPasswordConfirmationEntry { get; set; } } // 统一调用校验方法 var model = new PasswordModifyModel { OldPasswordEntry = OldPasswordEntry, NewPasswordEntry = NewPasswordEntry, NewPasswordConfirmationEntry = NewPasswordConfirmationEntry }; var validationContext = new ValidationContext(model); var validationResults = new List<ValidationResult>(); preparedToSubmit = Validator.TryValidateObject(model, validationContext, validationResults, true); // 按需把校验结果赋值给对应的提示标志即可
这种方案适合表单字段多、校验规则复杂的场景,代码可复用性更高,也更符合主流的开发规范。
内容的提问来源于stack exchange,提问作者denisaemailova
相关产品推荐
相关产品推荐

