如果我在C#中嵌套函數,那麼在執行內部函數代碼時如何一次從兩個函數中退出。 (Return;
只能從執行函數退出。)退出內部函數代碼中的所有函數
public void Function1()
{
Function2();
}
public void Function2()
{
if (1 == 1)
{
//Exit from both functions
}
}
如果我在C#中嵌套函數,那麼在執行內部函數代碼時如何一次從兩個函數中退出。 (Return;
只能從執行函數退出。)退出內部函數代碼中的所有函數
public void Function1()
{
Function2();
}
public void Function2()
{
if (1 == 1)
{
//Exit from both functions
}
}
使用返回代碼,而不是空洞的功能。 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;
}
}
我不知道你的函數執行。如果它適合您的方案,這可能會有所幫助。
public void Function1()
{
if(!Function2())
{
return;
}
}
public bool Function2()
{
if (1 == 1)
{
return false; //Exit from both functions
}
}
從功能棧返回的唯一方法是同時拋出異常。 一個異常會在調用堆棧中找到合適的處理程序的方式工作。
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 - 在異常處理程序
雖然你可以這樣做,但這不一定是個好主意。標準編碼實踐僅適用於特殊情況下的異常,而不適用於正常流量控制。
你可以只返回一個布爾值來表示成功:
public void Function1()
{
if(Function2())
{
//..
}
}
public bool Function2()
{
if (1 == 1)
{
return false;
}
return true;
}