如何防止C#中异常冒泡?

时间:2009-04-27 14:46:14

标签: c# exception visual-studio-2005 exception-handling

如果我正在编写一个类库,并且在该库中的某个时刻我有代码来捕获异常并处理它,那么我不希望任何人使用我的库知道它甚至发生了 - 它应该从外面看不见。

但是,如果他们在Visual Studio中打开了“Catch Thrown Exceptions”(而不是“Catch User Unhandled Exceptions”),那么 将对他们可见。

有什么方法可以避免这种情况吗?

4 个答案:

答案 0 :(得分:7)

没有。这是设计的:作为开发人员,我打开了“Catch Thrown Exceptions”,这样我就可以看到库代码中抛出的异常(并希望避免它们)。您所处的情况同样适用于.NET框架自己的库。

最好的方法是避免首先抛出异常。作为附带好处,您的库代码将更快,因为抛出异常会对性能产生显着影响(并且只应在“特殊情况”下使用)。

答案 1 :(得分:2)

唯一可以解决此问题的方法是,如果在可能引发异常的方法上放置[DebuggerHidden]属性。像其他人指出的那样,最好完全避免异常,但这个属性将完成你想要的。

答案 2 :(得分:0)

你无法阻止这一点。有人可以随时将debuger附加到过程中并监控正在发生的事情。

你可以删除异常并自己提供错误处理,但我真的不建议这样做,因为它是某种重新发明轮子 - 重新创建异常处理系统。

当然,只有当代码抛出和捕获异常的代码相距甚远,并且完全未发布时,所述适用。如果它们紧密耦合,您应该检查呼叫是否成功并且仅在此情况下调用。始终记住异常是针对特殊情况 - 不适用于可以检查操作是否成功的正常控制流程

答案 3 :(得分:0)

正如Tim Robinson所示,没有办法控制某人查看从您的图书馆抛出的异常。他的答案很好,所以我不会重复它。

在SO上有几篇帖子,在使用异常作为程序流控制进行寻址(听起来像)时,您可能会发现有用的信息:

Catching exceptions as expected program execution flow control?
Why are .Net programmers so afraid of exceptions?