如果我在C#中有嵌套函数,那么在执行内部函数代码时如何从两个函数中退出。 (Return;
仅退出执行函数。)
public void Function1()
{
Function2();
}
public void Function2()
{
if (1 == 1)
{
//Exit from both functions
}
}
答案 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;
}