【问题标题】:How to prevent exceptions bubbling up in C#?如何防止 C# 中出现异常?
【发布时间】:2010-10-22 02:03:58
【问题描述】:

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

但是,如果他们在 Visual Studio 中打开了“捕获抛出的异常”(而不是“捕获用户未处理的异常”),那么异常对他们可见。

有什么办法可以避免吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 谢谢您 - 将其传递给 Project White 的人员,这样我每次调用 UI 自动化代码时都不必看到异常,该代码会破坏被调用的对象。
      【解决方案3】:

      你无法阻止这一点。总有人可以将调试器附加到进程并监视正在发生的事情。

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

      当然,只有当代码抛出和捕获异常的代码相距甚远且完全不相关时,上述内容才适用。如果它们紧密耦合,您应该真正检查调用是否可以成功,并且只在这种情况下调用。永远记住,异常是针对特殊情况的——不是针对正常控制流,您可以在其中检查操作是否成功

      【讨论】:

        【解决方案4】:

        正如Tim Robinson 所暗示的,无法控制查看从您的库中抛出的异常的人。他的回答很好,我就不重复了。

        这里有几篇关于 SO 的帖子,在使用异常作为程序流控制来解决(听起来像什么)时,您可能会发现它们很有帮助:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-12-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多