2017-07-24 118 views
-1

我有标准的try-catch-finally块:是否有一个很好的方法来定义catch块是否运行?

try 
{ 
//Action 
} 
catch(Excteption e) 
{ 
//Catch block 
} 
finally 
{ 
// Action which would be run in case if catch block was not run 
// Action which would be run anyway 
} 

我想知道是否有某种方式或知道catch块的内部代码是不运行,运行特定的代码在finally块中,请注意,我明白我可以创建一个布尔值来将它放到catch块以检测它的执行情况,但这似乎是一种难以管理的事情:)

请分享您的解决方案, 谢谢:)

编辑: 最后我用Jeroen提出的稍微修改过的版本:

Func<string> Action = null; 
try 
{ 
Action =() => 
{ 
//Action 
return true; 
}; 
} 
catch(Exception e) 
{ 
Action =() => 
{ 
//Catch block 
return false 
} 
finally 
{ 
if(Action()) 
//Action which would be run in case if catch block was not run 
// Action which would be run anyway 
} 

谢谢!

+2

_“我明白我可以在catch块中创建一个bool值”_否,它必须在 –

+0

之外声明@TimSchmelter在我读取评论之前修复了一秒钟:) – Kiseki

+0

如何移动//动作如果catch块没有运行到'try'块中,在'// Action'之后运行? –

回答

1

你可以做什么,你在评论形容,但随后在C#:

Action toBeRun; 

try 
{ 
    ... 
    toBeRun =() => { ... }; 
} 
catch 
{ 
    toBeRun =() => { ... }; 
} 
finally 
{ 
    toBeRun(); 
} 
+0

嗯,这是一些东西,给了我一些经验! 感谢分享:) – Kiseki

+0

我只会纠正一件事: 它应该是: Action toBeRun = null; – Kiseki

+0

你可以使它'Action toBeRun =()=> {};',这样你就不必处理可能的NullReferenceExceptions – Jeroen

1

不知道更多关于你的情况,这是解决您的代码最简单的方法:

try 
{ 
    // Action 
    // Action which would be run in case if catch block was not run 
} 
catch(Exception e) 
{ 
    // Catch block 
} 
finally 
{ 
    // Action which would be run anyway 
} 

请注意,我只是将您的评论移至try区块。

如果// Action没有抛出异常,它将继续在try块内执行。

相关问题