C#如何不使用if else语句完成银行卡相关变量的合法性校验
实现方案
你当前的Validate方法缺少布尔返回值,不需要if else的话,直接把三个校验条件用逻辑与组合返回即可,优化后的代码如下:
public bool Validate() { CardNumberLength = Convert.ToString(GetCardNumber()).Length; CardPINLength = Convert.ToString(GetCardPIN()).Length; CardNameHasSpace = GetCardName().IndexOf(" "); // 直接返回三个校验条件的运算结果 return CardNumberLength == 16 && CardPINLength == 3 && CardNameHasSpace == 0; }
如果后续校验规则会频繁新增调整,可以用规则列表的写法,扩展性更强:
public bool Validate() { CardNumberLength = Convert.ToString(GetCardNumber()).Length; CardPINLength = Convert.ToString(GetCardPIN()).Length; CardNameHasSpace = GetCardName().IndexOf(" "); // 统一管理所有校验规则 var validationRules = new List<Func<bool>> { () => CardNumberLength == 16, () => CardPINLength == 3, () => CardNameHasSpace == 0 }; // 所有规则通过才返回true return validationRules.All(rule => rule()); }
注意事项
- 第一种写法适合规则固定的场景,代码最简洁,无多余性能损耗
- 第二种写法适合规则迭代频繁的项目,新增规则只需要在列表里加对应逻辑即可,无需修改核心校验逻辑
- 你的第三条规则
CardNameHasSpace == 0的实际含义是卡名第一个字符为空格,如果你的真实需求是卡名不含任何空格,需要把对应规则的判断值改为-1,因为IndexOf找不到匹配内容时返回值为-1
内容的提问来源于stack exchange,提问作者Alex Gottschalk
相关产品推荐
相关产品推荐

