【问题标题】:Exit all functions from code in inner function从内部函数的代码中退出所有函数
【发布时间】:2011-12-12 05:59:19
【问题描述】:

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

public void Function1()
{
    Function2();
}

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

【问题讨论】:

    标签: c#


    【解决方案1】:

    使用返回码而不是 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】:

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

      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 将创建以下跟踪输出

      Function0 - 调用函数 1

      Function1 - 调用函数 2

      Function2 - 抛出异常

      Function0 - 在异常处理程序中

      虽然您可以这样做,但这不一定是一个好主意。标准编码实践是仅在异常情况下使用异常,而不是用于正常的流控制。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

          public void Function1()
          {
              if(Function2())
              {
                 //..
              }
          }
          
          public bool Function2()
          {
              if (1 == 1)
              {       
                 return false;
              }
              return true;
          }
          

          【讨论】:

            猜你喜欢
            • 2011-08-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-10-12
            • 2018-09-09
            • 1970-01-01
            • 2014-08-23
            • 1970-01-01
            相关资源
            最近更新 更多