抛出可忽略的例外

Rog*_*gue 2 c# exception

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

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

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

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

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

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

slu*_*ter 5

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

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

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

    • 抛出什么异常
    • 为什么他们被扔了

    然后由调用者决定是否处理异常或让它冒泡.

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

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

  • 什么时候重要(即重要的是你传达错误状态或后果)
  • 当你改变或增加一个国家或后果的价值时

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