如何将C#重复条件判断封装为可复用方法并控制后续逻辑执行
问题描述
我在多个方法里用到重复的if判断逻辑,原代码功能正常,但想把这些判断封装成可复用方法。原代码如下:
private void method() { if (page_name == "SpecificPageName") { if (!TableHasElements) { // A: do something return; } else if (role != instructor) { // B: message("Access Denied") return; } } // C: Open Page }
我希望把里面的if判断逻辑抽成独立方法,但得保证只有A、B条件都不满足时,才执行后续的「C: Open Page」逻辑。我试了下面的写法,但不确定是否正确:
private void methodIWouldLikeToCall() { if (!TableHasElements) { // A: do something return; } else if (role != instructor) { // B: message("Access Denied") return; } } private void method() { if (page_name == "SpecificPageName") { methodIWouldLikeToCall(); } // C: Open Page }
请问该怎么正确实现这个需求?
正确实现方案
你当前的写法存在逻辑偏差——不管methodIWouldLikeToCall里有没有执行A或B逻辑,调用完之后都会直接执行「C: Open Page」,这和原代码的逻辑不符(原逻辑里执行A或B后会直接return,跳过C)。
要解决这个问题,核心是让封装的方法能告诉调用方:是否已经触发了A/B逻辑,需要跳过后续的C。最直接的方式是让封装方法返回一个布尔值,以下两种方案都能完美还原原逻辑并实现复用:
方案1:返回是否需要跳过C逻辑
// 封装的判断方法,返回true表示已经执行了A/B,需要跳过后续操作 private bool ShouldSkipOpenPage() { if (!TableHasElements) { // A: do something return true; } else if (role != instructor) { // B: message("Access Denied") return true; } // 没有触发A/B,不需要跳过 return false; } private void method() { if (page_name == "SpecificPageName") { if (ShouldSkipOpenPage()) { return; // 触发了A/B,直接返回,不执行C } } // C: Open Page }
方案2:返回是否可以执行C逻辑
也可以反过来,让方法返回是否允许执行后续的C逻辑,语义更直观:
// 返回true表示可以执行后续的Open Page操作 private bool CanOpenPage() { if (!TableHasElements) { // A: do something return false; } else if (role != instructor) { // B: message("Access Denied") return false; } return true; } private void method() { if (page_name == "SpecificPageName") { if (!CanOpenPage()) { return; } } // C: Open Page }
这两种方案都能实现判断逻辑的复用,其他需要相同判断逻辑的方法,直接调用对应的封装方法即可。
内容的提问来源于stack exchange,提问作者pakatwood
相关产品推荐
相关产品推荐

