删除过多的try-catch块

问题描述 投票:9回答:8

我正在重构其他开发人员编写的中型WinForms应用程序,几乎每个类的每个方法都被try-catch块包围。这些catch块有99%的时间仅记录异常或清除资源并返回错误状态。

我认为很明显,该应用程序缺少适当的异常处理机制,并且我计划删除大多数try-catch块。

这样做有什么缺点吗?你会怎么做?我打算:

  • 要适当地记录异常并防止其传播给用户,请使用Application.ThreadException处理程序

  • 对于有需要清理的资源的情况,请保持try-catch块不变

    ] >>
  • 更新

:使用usingtry-finally块是更好的方法。感谢您的答复。
  • 在“返回错误时返回错误”的方法中,让异常传播并在调用者中捕获它,而不是
  • 欢迎任何更正/建议。

编辑:

在第三项中,“返回错误时出错”是指这样的方法:
bool MethodThatDoesSomething() {
    try {
       DoSomething(); // might throw IOException
    } catch(Exception e) {
       return false;
    }
}

我想将其重写为:

void MethodThatDoesSomething() {
   DoSomething(); // might throw IOException
}

// try-catch in the caller instead of checking MethodThatDoesSomething's return value
try {
   MethodThatDoesSomething()
} catch(IOException e) {
   HandleException(e);
}

我正在重构其他开发人员编写的中型WinForms应用程序,几乎每个类的每个方法都被try-catch块包围。这些捕获块有99%的时间仅记录...

c# winforms exception-handling try-catch
8个回答
2
投票

“要适当地记录异常并防止其传播给用户,请使用Application.ThreadException处理程序”


2
投票

为了进行清理,请按照Amittai的建议使用try-finally或实施IDisposable。对于在错误时返回bool的方法,请尝试,如果不满足条件,则返回false。范例。


1
投票

作为“返回错误时出错”的选项,您可以通过以下方式清理代码:


1
投票

[最好是按照别人的说法,在1个地方进行异常处理。隐藏隐藏的异常而不是冒出来的错误做法。


1
投票

您应该


1
投票
我认为您的删除try / catch块的策略似乎只是在进行一般的无意记录,这很好。显然,留下清理代码是必要的。但是,我认为您的第三点需要进一步澄清。

1
投票
您可以尝试使用AOP。

0
投票
我们可以通过添加条件来删除try and catch,例如
© www.soinside.com 2019 - 2024. All rights reserved.