使用return退出循环?

时间:2009-12-01 23:07:55

标签: c#

如果我编写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语句所以我很好奇,因为我从未尝试过(并且无法访问我的软件来编写代码来测试它)。

5 个答案:

答案 0 :(得分:43)

return将退出当前方法(示例中为Main)。使用break退出循环。

答案 1 :(得分:5)

你当然可以做你所要求的。你是否应该有2个阵营。有些人说一个函数应该只有一个退出点。他们建议您应该使用一个标志变量来记录您需要退出(以及可能需要返回的任何数据),然后在您退出循环或到达if / else树的末尾后返回

就个人而言,我对函数的多个退出点没有任何问题,只要它们是对称的。 “对称”是什么意思?好吧,如果我要从循环内部返回,那么我也想在循环结束时返回(如果我从未达到循环中导致我提前返回的条件)。如果我在一个复杂的if / else层面并且我从其中一个案例中返回,那么我应该从所有案例中返回。

以下是我喜欢编写代码的一些简单示例:

    public string Search(IEnumerable<string> 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<string> 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;
    }

答案 2 :(得分:3)

可以执行此操作。调用return;将退出Main()。通常你会使用break;来打破for循环。

话虽如此,在单个功能中拥有多个返回位置通常被认为是不好的做法。许多开发人员更喜欢使用单个return语句(如果该方法未使用void声明)。从可理解性的角度来看,这可以使代码更容易理解,从而更易于维护和测试。

答案 3 :(得分:1)

牢记这些:

  1. 你可以这样做,但不推荐,因为它是自动的 退出当前的执行方法。
  2. 循环后的其他语句是强制性的,没有用 条件问题(由于它的行为在第1章中说明) 点)。
  3. 可以在您的程序中创建涟漪效果,即尝试解决 一个错误/错误/错误引发了许多新的错误。这使调试成为一种 有点复杂。

答案 4 :(得分:0)

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