对于null参数,抛出异常与检查null

Gur*_*epS 5 .net c# ado.net exception

如果参数为null(例如if(a为null)抛出新的ArgumentNullException()),则抛出异常的因素是什么,而不是事先检查参数是否为null.

我不明白为什么应该抛出异常而不是首先检查null?抛出异常方法有什么好处?

这适用于C#/ .NET

谢谢

Jas*_*n M 8

通常,当传递参数时,抛出ArgumentNullException,其值为null但应该"永远"为null.它是一个用于处理空值的特定ArgumentException.

通常情况下,如果您意识到您将获取null值作为args,则检查null并相应地计划方法的其余部分 - 如果不存在则通常创建记录,或者执行与运行时不同的子例程.存在有效的论点.在这种情况下,我通常不使用ArgumentNullException,因为我计划将null作为有效输入.

我只使用ArgumentNullException,当我肯定某些东西在它到达时不应该为null,我想记下一个定义为"无效"的参数.


Rob*_*eer 5

当参数为null时,您的方法可以执行以下三种操作之一.它可以抛出异常,它可以在不做任何事情的情况下返回,或者它可以做出假设并尝试继续.我假设你试图在前两个选项之间做出选择.

由于调用方法总是可以在调用方法之前检查参数,因此可以防止传递无效值.无论您的方法如何处理无效值,都是如此.

使用无效参数调用方法时,它应通知调用方处理没有继续.您可以通过抛出异常或返回错误值来通知它.如果检查null并且不返回错误值,则调用方法将假定您的方法处理没有错误.

您希望调用方法如何处理您的方法不处理的情况?如果传递null是正常现象,并且应该通过调用方法容易地处理,则返回null参数的错误是可以接受的.在这种情况下,调用方法要么先检查参数,要么在选择之后返回值,直到写入调用方法的人为止.

如果传递null非常罕见,则抛出异常.调用方法可以通过在调用方法之前检查参数来阻止异常,如上所述.通过抛出异常,可以解开调用堆栈而无需添加大量代码.

简介:
如果设置为null的参数是例程,并且应该编写调用方法来处理函数返回而不执行任何操作只返回错误值.如果一个null参数很少见,并且不能期望调用方法处理你的方法什么都不做就抛出异常,因此调用堆栈被解开.