2011-12-12 32 views
2

如果我在C#中嵌套函數,那麼在執行內部函數代碼時如何一次從兩個函數中退出。 (Return;只能從執行函數退出。)退出內部函數代碼中的所有函數

public void Function1() 
{ 
    Function2(); 
} 

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

回答

3

使用返回代碼,而不是空洞的功能。 Function1可以返回如果Function2失敗,如下所示:

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 void Function1() 
{ 
    if(!Function2()) 
    { 
     return; 
    } 
} 

public bool Function2() 
{ 
    if (1 == 1) 
    { 
     return false; //Exit from both functions 
    } 
} 
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將創建以下跟蹤輸出

Function0 - 調用功能1

功能1 - 調用功能2

功能2 - 拋出異常

Function0 - 在異常處理程序

雖然你可以這樣做,但這不一定是個好主意。標準編碼實踐僅適用於特殊情況下的異常,而不適用於正常流量控制。

2

你可以只返回一個布爾值來表示成功:

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

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