gpt4 book ai didi

c# - 删除过多的 try-catch block

转载 作者:太空狗 更新时间:2023-10-29 17:51:09 25 4
gpt4 key购买 nike

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

我认为这个应用程序显然缺乏适当的异常处理机制,我打算删除大部分 try-catch block 。

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

  • 要适本地记录异常并防止它们传播给用户,有一个 Application.ThreadException 处理程序

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

更新:使用usingtry-finally block 是更好的方法。感谢您的回复。

  • 在“return-false-on-error”的方法中,让异常传播并在调用者中捕获它

欢迎任何更正/建议。

编辑:在第 3 项中,“return-false-on-error”是指这样的方法:

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);
}

最佳答案

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

然后你能告诉用户发生了什么事吗?所有异常都会在那里结束吗?

“对于有资源需要清理的情况,保持 try-catch block 不变”

如果您希望在别处处理异常,您也可以使用 try-finally block 。还可以考虑在 IDisposable 资源上使用 using 关键字。

“在“错误时返回假”的方法中,让异常传播并在调用者中捕获它”

这取决于方法。异常(exception)应该只发生在特殊情况下。 FileNotFoundException 对于 FileExists() 方法抛出来说很奇怪,但由 OpenFile() 抛出是完全合法的。

关于c# - 删除过多的 try-catch block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7007647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com