我有标准的try-catch-finally块:
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
}
我想知道是否有某种方法可以知道catch块中的代码是否运行,在finally块中运行特定代码,请注意我明白我可以创建一个bool值来放置它是catch块以便检测它的执行,但这似乎是一种管理事物的丑陋方式:)
请分享您的解决方案, 谢谢:))
编辑: 最后,我使用了Jeroen提出的略微修改版本:
{{1}}
谢谢!
答案 0 :(得分:1)
您可以完全按照您在评论中描述的内容,但随后在C#中执行:
Action toBeRun;
try
{
...
toBeRun = () => { ... };
}
catch
{
toBeRun = () => { ... };
}
finally
{
toBeRun();
}
答案 1 :(得分: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
块内执行。