在Try,Catch,Finally中抛出异常VS返回错误

我很确定我已经知道了答案,但我仍然很好奇在Try,Catch,Finally块中处理错误的意见是什么 – 但是当你重复自己时.

顺便说一句 – 我不是在谈论用户输入 – 而是用它作为一个例子,因为它很简单

考虑一下这段代码……

try {    
    if (success) {
        return someSuccessMessage;
    }
    else {
        logError("User input not correct format");
        return someErrorMessage; // repeats itself
    }
}
catch (Exception ex) {
    logError(ex.Message);
    return someErrorMessage; // repeats itself
}

假设我们有一个函数,如果它失败了,我们想要返回一条错误消息,因为异常是无关紧要的 – 我们的函数没有成功,用户不需要任何额外的细节.

我一直坚信,如果你能处理错误,避免例外 – 因为它不再是例外,但我想知道避免重复自己的意见……你可以做以下事情以避免重复自己…

try {    
    if (success) {
        return someSuccessMessage;
    }
    else {
        throw new Exception("User input not correct format");
    }
}
catch (Exception ex) {
    logError(ex.Message);
    return someErrorMessage;
}

这不是最好的例子,但我为了简洁起见重复代码.

众所周知,例外会导致性能下降,但对于这种情况有什么想法呢?

最佳答案
我在这里质疑关注点的分离.除非此功能是UI的一部分,否则它不应该关注错误消息.它应该抛出异常.此方法的调用方(如果它是UI的一部分)可能希望生成错误消息以供显示.如果调用者是Web服务,那么它会想要生成SOAP Fault,它可能不会使用相同的消息(如果它根本使用了任何消息).

我还强烈建议你记录ex.ToString()而不是ex.Message.

转载注明原文:在Try,Catch,Finally中抛出异常VS返回错误 - 代码日志