任务发放系统开发:7个布尔值3个为true时调用方法的最优方案
如何判断7个布尔值中任意3个为true时调用指定方法?
嘿,作为编程新手完全不用慌,绝对不需要写几十堆if条件来枚举所有组合(那得写35个,想想都头大!),这里有几个简洁高效的方案,帮你轻松实现需求:
方案1:数组+LINQ统计(最直观易读,优先推荐)
把所有布尔值放进数组,用LINQ统计其中true的数量,达到3就调用方法。代码简洁易懂,后续修改判断数量或者增减布尔值都超级方便:
private bool a; private bool b; private bool c; private bool d; private bool e; private bool f; private bool g; private void Start() { // 将所有布尔值存入数组 bool[] flags = new bool[] { a, b, c, d, e, f, g }; // 统计数组中为true的元素数量 int trueCount = flags.Count(flag => flag); // 当恰好3个为true时调用方法 if (trueCount == 3) { TheMethod(); } } private void TheMethod() { // 执行你的操作 }
这个方案的优势在于可读性拉满,哪怕是刚入门的开发者也能一眼看懂逻辑,而且扩展性极强——比如以后要改成“任意4个为true”,只需要把==3改成==4就行;要加新的布尔值,直接往数组里加就行。
方案2:手动累加计数(性能略优,适合极端场景)
如果你特别在意那一点点性能开销(其实对于7个布尔值来说完全可以忽略),可以手动逐个判断累加,避免数组创建和LINQ调用:
private void Start() { int trueCount = 0; if (a) trueCount++; if (b) trueCount++; if (c) trueCount++; if (d) trueCount++; if (e) trueCount++; if (f) trueCount++; if (g) trueCount++; if (trueCount == 3) { TheMethod(); } }
这个方案没有额外的内存分配,性能上比第一种略好,但代码量稍多一点,适合对性能有极致要求的场景(不过你的任务发放系统大概率用不上)。
方案3:位运算统计(进阶玩法,适合想深入学习的新手)
布尔值可以对应二进制的0和1,我们可以用一个整数的二进制位来存储所有布尔值的状态,然后统计二进制中1的个数(也就是汉明重量):
private void Start() { int bitmask = 0; // 每个布尔值对应一个二进制位 if (a) bitmask |= 1 << 0; if (b) bitmask |= 1 << 1; if (c) bitmask |= 1 << 2; if (d) bitmask |= 1 << 3; if (e) bitmask |= 1 << 4; if (f) bitmask |= 1 << 5; if (g) bitmask |= 1 << 6; // 统计二进制中1的个数(.NET Core 3.0+支持) int trueCount = System.Numerics.BitOperations.PopCount((uint)bitmask); if (trueCount == 3) { TheMethod(); } }
这个方案性能极佳,而且是个很好的位运算学习案例,但需要你理解二进制位操作的概念,适合想进阶提升的同学。
总结一下:优先选择方案1,它在可读性、可维护性和性能之间达到了完美平衡,完全能满足你的需求,绝对比写一堆if条件要高效得多!
内容的提问来源于stack exchange,提问作者Gozmetaiemax
相关产品推荐
相关产品推荐

