使用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. 您可以这样做,但不建议这样做,因为它会自动退出当前的执行方法。
  2. 当循环之后的其他语句是强制性的时候无论条件如何(由于它在第1点中陈述的行为)都没有用。
  3. 可以在您的程序中创建涟漪效果,即尝试解决一个错误/错误/错误会产生许多新的。 这使得调试有点复杂。

答案方式逾期但return; 如果返回类型为void,则将退出整个方法(因此也不在循环中)。 如果不是,除非您返回方法的类型,否则它将无法编译。