You need to enable JavaScript to run this app. C#中能否根据bool变量动态设置if语句的比较运算符
优惠活动
大模型
产品
解决方案
定价
更多

C#中能否根据bool变量动态设置if语句的比较运算符

C#冗余代码简化方案

要实现根据布尔值切换比较逻辑、消除重复分支,无需动态拼接运算符,只需要把差异的比较逻辑抽离即可,有两种常用的实现方式:

方式1:委托封装比较规则(保留手动循环的灵活性)

将大小于的比较逻辑赋值给委托,分支判断仅在循环外执行一次,循环内统一调用委托判断是否需要更新当前匹配项:

static int SearchWithCondition(List<MyClass> list, bool someBool)
{
    // 循环外仅判断一次比较规则,避免循环内重复走分支
    Func<int, int, bool> needUpdate = someBool 
        ? (itemId, foundId) => itemId < foundId
        : (itemId, foundId) => itemId > foundId;

    MyClass found = list[0];
    foreach (var item in list)
    {
        if (needUpdate(item.id, found.id))
        {
            found = item;
        }
    }
    return found.id;
}
  • 运行逻辑和原代码完全一致,且因为把someBool的判断移出了循环,执行效率略高于原实现
  • 后续调整比较规则时,只需要修改委托的对应逻辑,不需要同步修改两处重复的分支代码

方式2:复用LINQ内置方法(代码最精简)

原逻辑本质就是根据someBool选择查找列表中id的最小值或最大值,可直接用LINQ封装好的方法完成查询,无需手动编写循环:

using System.Linq;

static int SearchWithCondition(List<MyClass> list, bool someBool)
{
    return someBool ? list.Min(x => x.id) : list.Max(x => x.id);
}
  • 行为和原代码完全一致(保持原代码默认列表非空的前置假设,不额外增加空判断逻辑)
  • 自定义逻辑最少,后期维护成本最低

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 11:54:06