0

我想尝试两种不同的事情(两者都有很大的失败可能性),因此我想使用“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. 如果步骤 #1 和 #2 都失败了,我希望我的程序在“finally”语句中显示 MessageBox。

我什至接近这个?

4

5 回答 5

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 ...");
}
于 2011-07-02T03:58:03.940 回答
0

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

于 2011-07-02T03:56:48.243 回答
0

在最佳实践中,您不应该将代码置于可能失败的位置。

对于您的示例,您应该使用嵌套的 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 ...");        
            } 

使用finally部分来释放你的资源,当你想要在 try 或 catch 之后,你的代码将 100% 执行。

于 2011-07-02T03:56:57.403 回答
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 ..."); 
        }
于 2011-07-02T04:00:55.853 回答
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块。

于 2011-07-02T04:02:11.313 回答