我想知道,如果没有抛出异常,有没有办法只执行一个块?
我能想出的最好的是:
bool exception = false;
try{
// something
}catch(Exception e){
exception = true;
}finally{
if(!exception){
// i can do what i want here
}
}
有更好的方法吗?
答案 0 :(得分:45)
当然有:把它放在try
区块的底部。
try{
// something
// i can do what i want here
}catch(Exception e){
// handle exception
}
这并不完全等同于原始代码,如果“你想要什么”抛出,异常将在本地捕获(这不会发生在您的原始方案中)。这是你可能会或可能不会关心的事情,并且很有可能不同的行为也是正确的行为。
如果你想恢复旧的行为,你也可以使用这个不需要finally
的变体只是为了编写“if no exceptions”条件:
var checkpointReached = false;
try{
// something
checkpointReached = true;
// i can do what i want here
}catch(Exception e){
if (checkpointReached) throw; // don't handle exceptions after the checkpoint
// handle exception
}
答案 1 :(得分:5)
你可以构造你的代码doSomething
是块中的最后一个语句并且它不会抛出吗?
bool exception = false;
try{
// something
doSomething();
} catch {
}
finally {
}
答案 2 :(得分:4)
您不需要finally子句。
解决方案:
bool exception = false;
try{
// something
}catch(Exception e){
exception = true;
}
if(!exception){
// u can do what u want here
}
通常你只需要在catch子句中返回一个,这样你甚至不必测试:
try{
// something
}catch(Exception e){
// do things
return;
}
// u can do what u want here
或(取决于用例,通常不太清楚,特别是如果您预期有多个例外 - 您不希望尝试捕获imbrications ......):
try{
// something
// u can do what u want here
}catch(Exception e){
// do things
}
答案 3 :(得分:3)
是的,有: 把它放在try块的末尾:)
答案 4 :(得分:1)
没有 - 你所拥有的可能是用C#做的最佳方式。
这是假设:
try
块的底部运行。 (也许是因为您不希望代码中的异常由主catch
块处理。)try...catch...finally
结构之外运行。 (也许是因为您希望代码在finally
块内的其他代码之前运行。)答案 5 :(得分:1)
虽然您的代码没有任何问题,但这是不必要的。只需将您希望执行的代码放在try块的底部:
try {
...
// No errors to this point, run what you wanted to run in the finally.
}
catch(Exception e) {
...
}
答案 6 :(得分:0)
我相信您正在尝试尝试:
try{
// something
try{
// something else not interfering with first try
} catch(Exception innerEx){
// something else threw this innerEx
}
}catch(Exception outerEx){
// something threw this outerEx
}
虽然这通常被认为是不好的做法,但我比旗帜版更喜欢它。