使用Try-Catch-Finally来处理算术异常

时间:2011-07-02 03:51:08

标签: c# error-handling try-catch-finally

我想尝试两种不同的东西(两者都有很大的失败可能性),因此我想使用“finally”语句运行“安全”以防万一前两次尝试 都失败了。

采用以下示例(这不是我在项目中使用的代码!)。

int zero = 0;
int one = 1;

try
{
    // Throws ' cannot divide by zero ' error
    int error = one / zero;
}

catch
{
    // Throws error again of course
    int somenum = one / zero;
}

finally 
{
    MessageBox.Show("I can never make it here ..."); 
}

所以,我希望我的程序能够执行以下操作:

  1. 尝试除以零
  2. 如果步骤#1 失败 ,我希望'catch'语句运行其代码(在此示例中应再次失败)。
  3. IF 步骤#1和#2都失败了,我希望我的程序能够在'finally'语句中显示MessageBox。
  4. 我是否接近这个?

5 个答案:

答案 0 :(得分:5)

int zero = 0;
int one = 1;

try {
    try
    {
        // Throws ' cannot divide by zero ' error
        int error = one / zero;
    }

    catch (DivideByZeroException)
    {
        // Throws error again of course
        int somenum = one / zero;
    }
}
catch (DivideByZeroException)
{
    MessageBox.Show("I can never make it here ...");
}

答案 1 :(得分:0)

你在做什么会奏效。但请注意,在finally块中显示的消息之后,异常将重新抛出。

答案 2 :(得分:0)

在Inbst练习中,您不应该在 catch 中放置可能失败的代码。

对于您的示例,您应该使用嵌套的 try-catch-finally

            int zero = 0;              
            int one = 1;
            bool flag=false;                
            try              
            {     
                try
                {
                    int error = one / zero; 
                }
                catch
                {
                    flag=false;
                }
                if(flag==false)               
                   int error = one / zero;              
            }                
            catch              
            {                  
                MessageBox.Show("I can never make it here ...");        
            } 

使用终于部分免费获取您的资源,在尝试或捕获后您需要的时间将执行100%。

答案 3 :(得分:0)

根据我的经验,你似乎需要在第一次捕获中再试一次:

        int zero = 0;
        int one = 1;

        try
        {
            // Throws ' cannot divide by zero ' error
            int error = one / zero;
        }

        catch
        {
            try
            {
                 // Throws error again of course
                 int somenum = one / zero;
            }
            catch { }
        }

        finally 
        {
            MessageBox.Show("I can never make it here ..."); 
        }

答案 4 :(得分:0)

原因是你在catch块上生成了一个例外而不处理它。

try
{
    int error = one / zero; // throws an exception
}
catch // catches
{
    int somenum = one / zero; // throws again
}
// no code to handle the exception
// application crashes

您可以避免放置嵌套的try catch块。