c# - 抛出可忽略的异常

标签 c# exception

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

假设我想确保参数不为空,例如

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

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

我考虑过以某种方式使用“重新抛出”,但我认为这行不通。

使用契约(Contract)之类的东西可以更好地做到这一点吗?

最佳答案

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

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

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

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

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

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

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

  • 当重要的时候(即,传达错误状态或后果很重要)
  • 当您改变状态或结果或为其增加值(value)时

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

关于c# - 抛出可忽略的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30657463/

相关文章:

python - "with"如何比 try/catch 在 Python 中打开文件更好?

c# - 自动从Visual Studio授予UWP应用程序权限

c# - 可空类型和运算符

C# - 基类中的调用方法

c# - SqlGeography.Reduce 方法如何工作?

c# - 单元测试 Controller 中抛出的异常

c# - EF 5 代码首先生成额外的外键

exception - 在 Try、Catch、Finally 中抛出异常 VS 返回错误

c# - 搜索查询给出 LINQ to SQL 异常

Java 空指针异常 - 不明白为什么