gpt4 book ai didi

c# - 删除过度热心的 try..catch block 的破坏性最小的方法是什么?

转载 作者:行者123 更新时间:2023-11-30 17:53:13 26 4
gpt4 key购买 nike

我继承的代码库充满了 error-hiding anti-pattern :

public void foo() {
try {
//Entire body of method, sometimes only 5 lines but often 500+
} catch (Exception e) {
Logger.LogToFile(e.msg);
}
}

此模式的实例数量约为数百个。

我的方法是完全删除 try..catch block ,因为我们已经在顶层有一个异常处理程序。这是不受欢迎的,因为感觉我正在改变行为。 (更多的异常(exception)会冒出来)。

理想情况下,我会遍历 10-500 行的 100 多个实例中的每一个,找出可能抛出的异常。然后我只会将这些异常压缩到更紧密的 block 中:

public void foo() {
//...
try {
// ~1-5 lines
} catch (ArgumentInvalidException e) {
Logger.LogToFile(e.ToString());
//TODO handle
}
//...
try {
// ~1-5 lines
} catch (UnitConversionException e) {
Logger.LogToFile(e.ToString());
//TODO handle
}
//...
}

这是一项令人生畏的工作量。

谁能想出一个聪明的方法来解决这个问题?

相关 - Removing excessive try-catch blocks

最佳答案

也许是“提取方法”http://refactoring.com/catalog/extractMethod.html在这种情况下会有所帮助。当我编写代码时,我会尝试区分错误和异常。 Errors != Exceptions 在一般情况下。异常代价太高,应该只在异常情况下发生。

我来解释一下:

try
{
int.Parse("..")
}
catch()
{
// parsing Exception
}

对比

if(int.TryParse("..", out value)
{
// parsing Error
}

关于c# - 删除过度热心的 try..catch block 的破坏性最小的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17619710/

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