hen*_*iny 9 c# exception-handling try-catch winforms
我正在重构由其他开发人员编写的中型WinForms应用程序,并且几乎每个类的每个方法都被一个try-catch块包围.99%的时间这些catch只阻止记录异常或清理资源并返回错误状态.
我认为很明显,这个应用程序缺乏适当的异常处理机制,我打算删除大多数try-catch块.
这样做有什么不利之处吗?你会怎么做?我打算:
要适当地记录异常并阻止它们传播给用户,请拥有一个Application.ThreadException处理程序
对于需要清理资源的情况,请保留try-catch块
更新:使用using或try-finally阻止是一种更好的方法.谢谢你的回复.
欢迎任何更正/建议.
编辑:在第3项中,"return-false-on-error"我的意思是这样的方法:
bool MethodThatDoesSomething() {
try {
DoSomething(); // might throw IOException
} catch(Exception e) {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
我想把它重写为:
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);
}
Run Code Online (Sandbox Code Playgroud)
“要正确记录异常并防止它们传播给用户,请使用 Application.ThreadException 处理程序”
然后你能告诉用户发生了什么吗?所有例外都会在那里结束吗?
“对于需要清理资源的情况,请保持 try-catch 块不变”
try-finally如果您希望让异常在其他地方处理,您也可以使用块。using还可以考虑在资源上使用关键字IDisposable。
“在“错误时返回 false”的方法中,让异常传播并在调用者中捕获它”
这取决于方法。例外只应在特殊情况下发生。AFileNotFoundException对于抛出的方法来说很奇怪FileExists(),但通过 抛出却完全合法OpenFile()。