从内部函数中的代码退出所有函数

时间:2011-12-12 05:59:20

标签: c#

如果我在C#中有嵌套函数,那么在执行内部函数代码时如何从两个函数中退出。 (Return;仅退出执行函数。)

public void Function1()
{
    Function2();
}

public void Function2()
{
    if (1 == 1)
    {       
        //Exit from both functions
    }
}

4 个答案:

答案 0 :(得分:3)

同时从一堆函数返回的唯一方法是抛出异常。 在它找到合适的处理程序之前,异常将在调用堆栈中运行。

public class MyException : Exception
{
}

public void FunctionZero()
{
   try
   {
      Trace.WriteLine("Function0 - Calling Function 1");
      Function1();
      Trace.WriteLine("Function0 - Function1 has returned");
   }
   catch(MyExceptionType ex)
   {
      Trace.WriteLine("Function0 - in the exception handler");
   }
}

public void Function1()
{
    Trace.WriteLine("Function1 - Calling Function 2");
    Function2();
    Trace.WriteLine("Function1 - Function2 has returned");
}

public void Function2()
{
    if (1==1)
    {
       // This will jump to the exception handler in function zero
       Trace.WriteLine("Function2 - throwing an exception");
       throw new MyException();
    }
}

Thiw将创建以下跟踪输出

  

功能0 - 调用功能1

     

功能1 - 调用功能2

     

功能2 - 抛出异常

     

Function0 - 在异常处理程序

虽然你能做到这一点,但这不一定是个好主意。标准编码实践仅用于例外情况,而不是用于正常的流量控制。

答案 1 :(得分:3)

使用返回代码而不是void函数。如果Function2失败,Function1可以返回:

public void Function1()
{
    if (Function2() == false)
        return;

    // do other code if Function2 succeeded
}

public bool Function2()
{
    if (1 == 1)
    {
        return false;
    }
    else
    {
        return true;
    }
}

答案 2 :(得分:2)

我不确定你的功能是做什么的。如果它适合您的场景,这可能会有所帮助。

public void Function1()
{
    if(!Function2())
    {
      return;
    }
}

public bool Function2()
{
    if (1 == 1)
    {   
        return false;  //Exit from both functions
    }
}

答案 3 :(得分:2)

您可以返回一个布尔值来表示成功:

public void Function1()
{
    if(Function2())
    {
       //..
    }
}

public bool Function2()
{
    if (1 == 1)
    {       
       return false;
    }
    return true;
}