我刚刚阅读here我不应该从我自己的源代码中抛出ArgumentNullException
。这是为什么?
如果我有一个不应该传递null
的方法,为什么不检查参数并抛出它是否确实为空?
public void DoStuff(List<Int32> list) // Shouldn't be null.
{
if(list == null) // If input is null...
throw new ArgumentNullException();
...
}
感谢。
答案 0 :(得分:6)
该引用没有说任何这样的事情(我找不到该页面上提到的ArgumentNullException)。它确实说不抛出NullReferenceException,这是一个完全不同的异常,并且确实不应该从你自己的代码抛出(你没有理由)。
我一直从自己的代码中抛出ArgumentNullException,检查参数时.NET Framework也是如此。
答案 1 :(得分:3)
当然你应该。事件你自己的链接有这个例子作为第一个。如果该方法是公开的,则应始终检查参数有效性。
该链接仅讨论NullReferenceException,这仅在您尝试访问null引用对象的方法时才会发生。不抛出NullReferenceExceptions是正确的,因为它们仅由运行时抛出。
答案 2 :(得分:3)
抛出ArgumentNullException没有错,这是一个很好的做法。
文章讨论的是System.Exception,System.SystemException,System.NullReferenceException或System.IndexOutOfRangeException
答案 3 :(得分:1)
因为如果你抛出一个* NullReferenceException * ,这意味着你预料到其中一个对象可以对它自己有一个空引用。将逻辑编程到代码中处理这个问题会更好,而不是依赖异常来处理它。
不应将异常用于更改程序的流程,作为普通执行的一部分。它们只应用于报告和处理错误情况。
答案 4 :(得分:1)
如果可以使用null参数的默认值,并且只要明确记录默认值,那么可能值得考虑该选项。
但是,您应始终验证公共方法中的任何参数。不要相信其他开发人员知道他们在做什么。由于无效参数而抛出的任何异常都应从ArgumentException
类继承。