我想尝试两种不同的东西(两者都有很大的失败可能性),因此我想使用“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 ...");
}
所以,我希望我的程序能够执行以下操作:
我是否接近这个?
答案 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
块。