【发布时间】:2015-09-19 21:24:00
【问题描述】:
我正在编写一些基于网络中多个来源的异常处理最佳实践。从微软网页 (https://msdn.microsoft.com/en-us/library/seyhszts(v=vs.110).aspx) 我得到了推荐:
“堆栈跟踪从抛出异常的语句开始,到捕获异常的 catch 语句结束。在决定放置 throw 语句的位置时要注意这一点。”
我不太清楚这意味着什么。我们可以说“投掷”的最佳位置是尽可能靠近所讨论的电话吗?这是正确的还是有人有其他建议?
编辑:我会更准确。请看下面的伪代码
// do something that assignes a value to 'someValue'
// do more that's not related to the call above
if (someValue == whatever)
{
throw new MyException();
}
我假设当我在有问题的调用(做某事)之后做了其他事情后抛出异常时,我不会得到正确的堆栈跟踪,将我指向正确的行。我说的对吗?
【问题讨论】:
-
抱歉,这可能听起来很粗鲁,但如果您不明白这意味着什么,那么您可能不适合定义“最佳”实践。
-
在不适用进一步工作的地方抛出异常,这通常是发生错误的地方。
-
最好的地方?当然是在 try 块内,或者在 try 块内执行的任何方法。我的意思是,你还会把它放在哪里?
-
@DavidArno:这不是那么粗鲁,只是诚实;-)。这就是为什么我把这个问题放在这里是为了使它成为一种最佳实践,而不仅仅是从网络上复制一些建议。
-
我想要更精确。参见下面的伪代码: // 做一些为 'someValue' 赋值的事情 // 做更多与上面的调用无关的事情 if (someValue == whatever) { throw new MyException(); }
标签: c# exception-handling throw