如何抛出一个如果不处理就可以忽略的异常?
假设我想确保参数不为空,例如
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/