You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:45:05