我有这个代码,我想阻止最终执行
try
{
throw new Exception("Try Error!!!");
}
catch(Exception exp)
{
Console.WriteLine(exp.Message);
Console.ReadLine();
if(exp.Message == "Try Error!!!")
return;
}
finally
{
Console.WriteLine("Finally...");
Console.ReadLine();
}
但是返回不起作用。
答案 0 :(得分:12)
最终不会仅在以下三个条件下运行:
try
或catch
块调用System.exit()。对于所有其他条件....最后总是执行...有一个布尔变量来控制最终代码的执行是一个聪明的方法...去吧......
答案 1 :(得分:8)
这是最终的意义 - 它总是运行。
试试这个:
bool runfinally = true;
try {
throw new Exception("test");
} catch {
runfinally = false;
} finally {
if(runfinally) {
// do stuff.
}
}
答案 2 :(得分:3)
你为什么要这样做?
最后就是这样它总是运行并完成一些必须完成的完成工作,如果你只想在try运行时执行代码然后在try语句中写入,否则如果它只是在它失败那么在抓住一个。必须在finally部分中编写必须在两种情况下进行调整的代码。
答案 3 :(得分:2)
唯一的方法是设置finally
代码测试的标志变量,例如:
bool handled = false;
try
{
throw new Exception("Try Error!!!");
}
catch(Exception exp)
{
Console.WriteLine(exp.Message);
Console.ReadLine();
if (exp.Message == "Try Error!!!")
{
handled = true;
return; // This isn't really necessary unless you have code below it you're not showing
}
}
finally
{
if (!handled)
{
Console.WriteLine("Finally...");
Console.ReadLine();
}
}
...但我真的考虑重新审视你的逻辑,所以你不需要这样做。 finally
的整点是无论try
块中发生什么,finally
代码都会运行,无论您是否早期从代码返回try
阻止,或发生异常,或者从catch
块内返回。
答案 4 :(得分:2)
最后一点是,无论try / catch块如何执行,它都会运行。一种解决方法可能是这样的:
bool runfinallycode = true;
try
{
throw new Exception("Try Error!!!");
}
catch(Exception exp)
{
Console.WriteLine(exp.Message);
Console.ReadLine();
if(exp.Message == "Try Error!!!")
runfinallycode = false;
}
finally
{
if( runfinallycode )
{
Console.WriteLine("Finally...");
Console.ReadLine();
}
}
答案 5 :(得分:1)
无论try catch块发生什么,最终都会被执行。这意味着你可以在退出函数之前释放资源。
答案 6 :(得分:1)
System.exit()可用于避免执行finally块Finally Block。 但是如果您的条件是执行不应该受到阻碍,那么请重新构建问题。
答案 7 :(得分:-1)
但是你的回复是在一个if子句中,所以它不会一直有效。尝试将它放在if in catch
之外