使用return退出循环?
如果我编写for,do或while循环,是否可以使用return关键字来解决这个问题?
例如:
class BreakTest { public static void Main() { for (int i = 1; i <= 100; i++) { if (i == 5) **return;** Console.WriteLine(i); } } }
我知道return可以用来退出if语句所以我很好奇,因为我从来没有尝试过(并且无法访问我的软件来编写代码来测试它)。
return
将退出当前方法(在您的示例中为Main)。 使用break
退出循环。
你当然可以做你想要的。 你是否应该有2个阵营。 有些人说一个函数应该只有一个退出点。 他们建议您应该使用一个标志变量来记录您需要退出(以及可能需要返回的任何数据),然后在您退出循环或到达if / else树的末尾后返回。
就个人而言,我对函数的多个退出点没有任何问题,只要它们是对称的。 “对称”是什么意思? 好吧,如果我要从循环内部返回,那么我也想在循环结束时返回(如果我从未达到循环中导致我提前返回的条件)。 如果我在一个复杂的if / else层面并且我从其中一个案例中返回,那么我应该从所有案例中返回。
以下是我喜欢编写代码的一些简单示例:
public string Search(IEnumerable values) { foreach(string value in values) { if(SomeArbitraryCondition()) return value; } return null; } public int PerformAction() { if (SomeArbitraryCondition()) { if (SomeArbitraryCondition()) { return 1; } else { return 2; } } else { if (SomeArbitraryCondition()) { return 3; } else { return 4; } } }
这不是一个我认为很多的硬性规则,但它只是我喜欢写它的方式,因为它对我来说似乎最干净。 在某些情况下,使用标志变量并在一个地方返回更有意义。
public string Search(IEnumerable values) { string found = null; foreach(string value in values) { if(SomeArbitraryCondition()) found = value; } return found; } public int PerformAction() { int state; if (SomeArbitraryCondition()) { if (SomeArbitraryCondition()) { state = 1; } else { state = 2; } } else { if (SomeArbitraryCondition()) { state = 3; } else { state = 4; } } return state; }
你可以做到这一点。 致电return;
将退出Main()。 通常你会使用break;
改为摆脱for循环。
话虽如此,在单个函数中拥有多个返回位置通常被认为是不好的做法。 许多开发人员更喜欢使用单个return语句(如果该方法未声明为void
)。 从可理解性的角度来看,这可以使代码更容易遵循,因此更易于维护和测试。
记住这些:
- 您可以这样做,但不建议这样做,因为它会自动退出当前的执行方法。
- 当循环之后的其他语句是强制性的时候无论条件如何(由于它在第1点中陈述的行为)都没有用。
- 可以在您的程序中创建涟漪效果,即尝试解决一个错误/错误/错误会产生许多新的。 这使得调试有点复杂。
答案方式逾期但return;
如果返回类型为void,则将退出整个方法(因此也不在循环中)。 如果不是,除非您返回方法的类型,否则它将无法编译。