如何逐行检查条件并临时忽略指定单行条件的校验?
问题与解决方案
原代码
enum Condition { Off, On, Other }; Condition val1, val2, val3; bool CheckCondition() { if (!(val1 == Condition.On)) return false; if (!(val2 == Condition.Off)) return false; if (!(val3 == Condition.On)) return false; return true; }
需求说明
- 当某个条件变量处于
Condition.Off状态时,临时忽略该条件的校验(直到它被重新设置为Condition.On),但必须执行完所有其他条件的校验。 - 仅当所有未被忽略的条件校验都通过时,函数才返回
true。 - 核心要求:即使某个条件因
Off被忽略,也不能提前返回false,必须执行完所有检查逻辑后再判断最终结果。
实现方案
代码实现
bool CheckCondition() { bool allValid = true; // 校验val1:非Off状态时,必须为On if (val1 != Condition.Off) { if (val1 != Condition.On) { allValid = false; } } // 校验val2:非Off状态时,必须为Off(原逻辑要求) if (val2 != Condition.Off) { if (val2 != Condition.Off) { allValid = false; } } // 校验val3:非Off状态时,必须为On if (val3 != Condition.Off) { if (val3 != Condition.On) { allValid = false; } } return allValid; }
思路解析
- 用
allValid变量统一记录所有有效条件的校验结果,初始值为true。 - 对每个条件变量单独处理:
- 若变量是
Condition.Off,直接跳过该条件的校验,不改变allValid。 - 若变量不是
Condition.Off,则检查它是否符合预期值(val1、val3需为On,val2需为Off),不符合则将allValid设为false。
- 若变量是
- 所有检查完成后返回
allValid,确保只有未被忽略的条件全部通过时才返回true,且全程执行完所有检查逻辑。
内容的提问来源于stack exchange,提问作者chrisk
相关产品推荐
相关产品推荐

