显式抛出NullReferenceException的原因?

Mar*_*ski 7 .net nullreferenceexception

我正在清理一些遗留代码,并且我找到了显式抛出的方法NullReferenceException(例如:在检查类的某些属性是否为空时,或检查配置时).由于在空引用的情况下CLR抛出了这种类型的异常,对于应用程序显式抛出,这似乎是一个非常糟糕的异常选择.

我的问题是 - 对于从代码中明确抛出的异常,有什么理由NullReferenceException可以作为一个很好的选择吗?

Dam*_*ver 9

文档暗示您不应该从应用程序中抛出它:NullReferenceException

请注意,应用程序抛出ArgumentNullException异常,而不是此处讨论的NullReferenceException异常.

我相信我已经在其他地方看到了指导(目前找不到任何指导 - >它在这里https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/using-standard-异常类型)你应该避免抛出运行时抛出的异常类型(虽然我要链接到显示运行时抛出"应用程序"异常的东西)


如果您正在检查方法中的属性,则在继续之前,听起来您可能希望用InvalidOperationException替换它们:

如果调用方法失败是由无效参数以外的原因引起的,则使用InvalidOperationException.

处于方法调用的错误状态听起来像是符合这个定义.


Guf*_*ffa 5

不,没有理由抛出一个NullReferenceException.

你总是有一些关于错误原因的详细信息,所以你应该把那传达信息的例外.

例如,如果您在不允许的情况下获取空引用作为参数,则可以抛出ArgumentExceptionArgumentNullException替代.