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
相关产品推荐
相关产品推荐

