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

C#中如何避免冗余多条件判断?附CheckForConverted方法代码示例

C# 消除冗余多条件判断的实现方案

你现在的代码冗余根源是:提前定义了合法前缀数组,却没有在判断逻辑里复用,才会写出一长串串联StartsWith的OR条件。基于已有的前缀列表做批量匹配就能彻底解决这个问题,还能顺带修复原代码没处理的空引用边界问题。

基础改造(完全适配现有代码结构)

直接复用已定义的前缀数组,结合LINQ的Any方法做批量匹配,不需要手动串联条件:

// 需先引入System.Linq命名空间
private static bool CheckForConverted(string policynumber)
{
    // 补上空值/空串的边界判断,避免原代码调用StartsWith时触发空引用异常
    if (string.IsNullOrEmpty(policynumber))
    {
        return false;
    }

    string[] prefix = { "0", "1", "2", "3", "4" };
    // 只要任意一个前缀符合匹配规则,就返回结果
    return prefix.Any(p => policynumber.StartsWith(p, StringComparison.Ordinal));
}

这种写法的优势:

  • 后续调整合法前缀规则时,只需要修改prefix数组的内容,完全不需要改动判断逻辑,可维护性大幅提升
  • 逻辑和业务定义完全绑定,不会出现写漏条件、条件拼写错误的问题
  • 补充指定StringComparison.Ordinal参数,避免不同区域设置下出现非预期的字符串匹配结果

高频调用场景的性能优化

如果这个方法会被业务高频触发,可以把固定的前缀列表提取为类级别的静态只读字段,避免每次调用方法时都重新分配数组内存:

// 固定前缀只初始化一次,减少重复内存分配
private static readonly string[] ValidConvertedPolicyPrefixes = { "0", "1", "2", "3", "4" };

private static bool CheckForConverted(string policynumber)
{
    if (string.IsNullOrEmpty(policynumber))
    {
        return false;
    }
    return ValidConvertedPolicyPrefixes.Any(p => policynumber.StartsWith(p, StringComparison.Ordinal));
}

当前单字符前缀场景的极简实现

因为你目前的合法前缀都是0-4的单个数字,其实不需要字符串数组的遍历匹配开销,直接判断首字符范围即可,执行效率更高:

private static bool CheckForConverted(string policynumber)
{
    if (string.IsNullOrEmpty(policynumber))
    {
        return false;
    }
    // 直接判断首字符是否落在0到4的字符区间内
    char firstChar = policynumber[0];
    return firstChar >= '0' && firstChar <= '4';
}

注意:这个极简写法仅适用于当前所有合法前缀都是单字符的场景,如果后续前缀需要改成多字符(比如"01"、"123"这类长度超过1的匹配规则),还是要回到前面基于数组遍历的实现方式,避免逻辑不匹配。

内容的提问来源于stack exchange,提问作者Kumas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 00:24:03