什么是NullReferenceException,如何解决?

我有一些代码,执行时会抛出NullReferenceException,说:你调用的对象是空的。

这是什么意思,我该怎么做才能解决此错误?

原因是什么

您正在尝试使用null(或Nothing在VB.NET中)。

这意味着您要么将其设置为null,要么根本不将其设置为任何东西。 

像其他任何东西一样,null被传遍。

如果null 在方法“ A”中,则可能是方法“ B”将a传递null 给方法“ A”。 

null 可以具有不同的含义: 

1、未初始化的对象变量,因此没有指向任何对象。在这种情况下,如果访问此类对象的属性或方法,则会导致NullReferenceException。 

2、开发人员有意使用null表示没有可用的有意义的值。请注意,C#具有变量的可为空的数据类型的概念(例如数据库表可以具有可为空的字段)-您可以分配null给它们以指示其中没有存储任何值,例如int? a = null;,问号指示允许在其中存储null。

可变的a。您可以使用if (a.HasValue) {...}或通过进行检查if (a==null) {...}。像a本示例一样,可空变量允许通过a.Value显式访问值,或者像通过正常访问变量一样a。 注意的是通过访问它a.Value抛出InvalidOperationException,而不是NullReferenceException如果aISnull-您应该事先进行检查,即,如果您有另一个on-nullable变量,int b;则应该进行like if (a.HasValue) { b = a.Value; }或更短的赋值if (a != null) { b = a; }。 

本文的其余部分将详细讨论并显示许多程序员经常犯的错误,这些错误可能导致错误NullReferenceException。

进一步来说

该runtime扔NullReferenceException 总是意味着同样的事情:你要使用的引用,引用未初始化(或它一次初始化,但不再初始化)。 

这意味着引用为null,并且您无法通过null引用访问成员(例如方法)。

最简单的情况:

string foo = null;
foo.ToUpper();

这将NullReferenceException在第二行抛出,因为您无法ToUpper()在string指向的引用上调用实例方法null。

调试

您如何找到来源NullReferenceException?除了查看将要引发的异常本身之外,Visual Studio中的调试一般规则也适用:放置战略断点并检查变量,方法是将鼠标悬停在它们的名称上,然后打开(快速)监视窗口或使用各种调试面板(例如本地和自动)。 如果要查找在哪里设置或未设置引用,请右键单击其名称,然后选择“查找所有引用”。然后,可以在每个找到的位置放置一个断点,并在连接了调试器的情况下运行程序。调试器每次在这样的断点处中断时,都需要确定是否希望引用为非空,检查变量,并在期望时验证它是否指向实例。 

通过以这种方式遵循程序流程,您可以找到实例不应为null的位置以及未正确设置实例的原因。

本文翻译至stackoverflow,内容略有出入,原文地址:https://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it,侵删。


欢迎分享,(木庄网络博客交流QQ群:562366239

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论