有没有一种很好的方法来定义是否运行了catch块?

时间:2017-07-24 11:35:28

标签: c#

我有标准的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}}

谢谢!

2 个答案:

答案 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块内执行。