考虑以下功能。我用C#写的。
public void Test()
{
statement1;
try
{
statement2;
}
catch (Exception)
{
//Exception caught
}
}
我只想在statement1
没有异常的情况下执行statement2
。只有当statement1
没有抛出任何异常时才能执行statement2
吗?
是的,您可以通过这种方式轻松完成
public void Test()
{
try
{
statement2;
statement1;
}
catch (Exception)
{
//Exception caught
}
}
如果statement2抛出一些异常,则statement1将不会运行。
另一种不太酷的方法是使用变量
public void Test()
{
bool completed=false;
try
{
statement2;
completed=true;
}
catch (Exception)
{
//Exception caught
}
if (completed)
statement1;
}
更改语句的顺序和逻辑。您无法在运行时预见到异常
如果我正确地理解了你的问题,这就是你想要的(在statement1;
下移动statement2;
):
try
{
statement2;
statement1;
}
catch (Exception)
{
//Exception caught
}
通过这种方式,只有当statement1
没有异常时才会执行statement2
!
您可以在异常后调用该方法,
public void Test(bool noerror= false)
{
if (noerror)
statement1;
try
{
statement2;
completed=true;
}
catch (Exception)
{
noerror=true;
Test(noerror)
//Exception caught
}
}
是的,你可以,你所要做的就是在语句2下移动语句1,因为只有当语句2没有抛出任何异常时,编译器才会到达statement1。代码如下:
public void Test()
{
try
{
statement2;
statement1;
}
catch (Exception)
{
//Exception caught
}
}
是的,而你实际上正在使用它(但是错误的)。
try...catch
块用于捕获异常并采取适当的操作,无论是否抛出异常:
try
{
// risky operation that might throw exception
RiskyOperation();
// here code is executed when no exception is thrown
}
catch(Exception ex)
{
// code here gets executed when exception is thrown
}
finally
{
// this code evaluates independently of exception occuring or not
}
总而言之,您需要做到:
try
{
statement2;
statement1;
}
catch(Exception ex)
{
// code here gets executed when exception is thrown
}
您可以选择递归,但我们需要确保它不会以无限循环结束。
public void Test()
{
bool hasException = false;
statement1;
try
{
statement2;
}
catch (Exception)
{
hasException = true;
}
finally
{
if(hasException)
Test();
}
}