如果没有异常,是否可以有条件地执行语句?

问题描述 投票:1回答:7

考虑以下功能。我用C#写的。

public void Test()
{
    statement1;
    try
    {
        statement2;
    }
    catch (Exception)
    {
        //Exception caught
    }
}

我只想在statement1没有异常的情况下执行statement2。只有当statement1没有抛出任何异常时才能执行statement2吗?

c# .net exception try-catch
7个回答
4
投票

是的,您可以通过这种方式轻松完成

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;
    }

3
投票

更改语句的顺序和逻辑。您无法在运行时预见到异常


3
投票

如果我正确地理解了你的问题,这就是你想要的(在statement1;下移动statement2;):

try
{
    statement2;
    statement1;
}
catch (Exception)
{
    //Exception caught
}

通过这种方式,只有当statement1没有异常时才会执行statement2


2
投票

您可以在异常后调用该方法,

public void Test(bool noerror= false)
{
   if (noerror)
      statement1;

    try
    {
        statement2;
        completed=true;
    }
    catch (Exception)
    {
         noerror=true;
        Test(noerror)
        //Exception caught
    }

}

2
投票

是的,你可以,你所要做的就是在语句2下移动语句1,因为只有当语句2没有抛出任何异常时,编译器才会到达statement1。代码如下:

 public void Test()
{
try
{
    statement2;
    statement1;
}
catch (Exception)
{
    //Exception caught
}
}

1
投票

是的,而你实际上正在使用它(但是错误的)。

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
}

1
投票

您可以选择递归,但我们需要确保它不会以无限循环结束。

public void Test()
{
   bool hasException = false;
   statement1;
   try
   {
       statement2;
   }
   catch (Exception)
   {
       hasException = true;
   }
   finally
   {
       if(hasException)
           Test();
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.