抛出可忽略异常

本文关键字:异常 可忽略 | 更新日期: 2023-09-27 17:53:23

如果没有处理,如何抛出可以忽略的异常?

假设我想确保一个参数不为空,比如

if (param == null)
{
    throw new ArgumentException("Param is null!");
    // if the exception isn't handled in the calling code, just return
}

如果碰巧传递了一个空参数,我不想弄乱调用该方法的代码。然而,我仍然希望抛出一个异常,以防使用它的人确实处理了异常。

我想过用"rethrows",但我觉得那行不通。

这能不能用合约之类的东西更好地完成?

抛出可忽略异常

有两种方法可以处理您想要做的事情:

  • 不要抛出异常。相反,只需返回,而不会产生任何副作用。当然,这可能是不可能的,这取决于你的方法的目的是什么。

  • 抛出异常,但也要在你的文档中明确:

    • 抛出哪些异常
    • 为什么它们被抛出

    则由调用者决定是处理异常还是让它冒泡。

请注意,如果你抛出异常而没有人处理它,那么无论调用你的代码是什么都会崩溃。这可能被认为是一个破坏性的变化,可能不是一个受欢迎的行为变化。

一般的经验法则是你应该只抛出异常:

  • 当它是重要的(即,它是重要的,你沟通一个错误状态或后果)
  • 当你改变或增加一个状态或结果的值

如果空参数值真的很重要,因为没有它就不能工作,那么异常也很重要,调用者不应该忽略它。如果null参数无关紧要,那么不要抛出异常,相反,您应该返回一个有效的null/空/中性响应。