抛出可忽略异常
本文关键字:异常 可忽略 | 更新日期: 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/空/中性响应。