抛出可忽略的例外

时间:2015-06-05 02:34:34

标签: c# exception

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

说我想确保一个参数不是null,比如

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

如果碰巧传递了null参数,我不想搞乱调用该方法的代码。但是,我仍然想抛出异常,以防无论谁使用它都会处理异常。

我想过以某种方式使用“重新抛出”,但我认为这不会起作用。

用合同之类的东西可以做得更好吗?

1 个答案:

答案 0 :(得分:5)

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

  • 不要抛出异常。而只是返回而不会产生任何副作用。当然,这可能无法做到,具体取决于您的方法的用途。

  • 抛出异常,但也在文档中明确说明:

    • 抛出什么异常
    • 他们被抛出的原因

    然后由调用者决定是否处理异常或让它冒出来。

请注意,如果抛出异常并且没有人处理它,那么调用代码的任何内容都会崩溃。这可能被认为是一个突破性的变化,可能不是一个受欢迎的行为改变。

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

  • 重要时(即,您传达错误状态或后果很重要)
  • 当你改变或增加一个州或后果的价值时

如果null参数值确实很重要,因为没有它就无法运行,那么异常也很重要,调用者不应该忽略它。如果null参数不重要,那么不要抛出异常,而应该返回一个有效的null / empty / neutral响应。