【发布时间】:2012-02-14 10:39:00
【问题描述】:
我已经查看了一些异常问题,但找不到明确的答案,尤其是关于 C# 最佳实践的问题。
也许我总是对使用异常的最佳方式感到困惑,我看到这篇文章基本上说“始终使用异常,从不使用错误代码或属性”http://www.eggheadcafe.com/articles/20060612.asp。我肯定会买那个,但这是我的困境:
我有一个调用“被调用者”的函数“调用者”。 'callee' 执行一些不同的事情,每一个都可能抛出相同类型的异常。如何将有关“被调用者”在异常发生时正在做什么的有意义的信息传递回“调用者”?
我可以抛出一个像下面这样的新异常,但我担心我会弄乱堆栈跟踪,这很糟糕:
//try to log in and get SomeException
catch(SomeException ex)
{
throw new SomeException("Login failed", ex);
}
...
//try to send a file and get SomeException
catch(SomeException ex)
{
throw new SomeException("Sending file failed", ex):
}
谢谢,马克
【问题讨论】:
-
异常会自动在调用堆栈中冒泡。您不必重新扔掉它们。
-
@CodyGray 重新抛出的原因是添加信息,以便调用者可以区分它们。如果我从被调用者那里远程尝试/捕获,那么调用者将不知道多个操作中的哪个操作导致了异常。
-
我不明白为什么被调用者不只是抛出一个包含有关它正在做什么的信息的异常。调用者无论如何都不应该知道被调用者在做什么!
-
您能否举例说明调用者需要在哪里区分异常?调用者会根据异常做不同的事情吗?
-
不控制执行流程,只是想将更多信息传递回 UI,而不是从抛出的异常中收集到。
标签: c# exception-handling error-handling