1

我正在寻找解决错误的步骤/指南Object reference not set to an instance of an object.以及问题发生原因的解释。

我正在寻找更一般的解释,所以如果我收到错误,我应该采取哪些步骤来找到问题。我经常看到有人提供特定代码的帖子,而其他人将提供固定代码(有时)。如果提供简单的代码示例来说明这个问题,那很好。

我需要一个高层次的解释。

4

5 回答 5

3

解释它的最简单方法是,如果您的对象引用(您的变量)是null,那么您无法在不触发该异常的情况下访问其上的任何属性或方法。这是一个会抛出“Null Ref”异常的代码示例(因为它们被称为):

string s = null;
int leng = s.Length;

所以我将 a 定义stringnull,然后尝试访问它的Length属性。发生异常。如果我使用了null string类似的方法ToString(),也会发生异常。

追踪此错误的问题在于,正如您从错误文本中看到的那样,您无法立即判断 Null Ref 发生在哪里。您必须在异常发生之前放置一个断点并遍历代码,直到找到有问题的部分。

于 2013-09-05T19:19:40.217 回答
1

没有通用步骤 - 此类问题通常存在于您的代码逻辑中,并且变化太大而无法获得“一刀切”的解决方案。

但是,您可以做的一件事是在抛出此异常时进入调试器(在 DEBUG/Exceptions 下打开NullReferenceException),查看哪个对象是,并通过检查对象来null尝试找出原因,也许去调用堆栈,看看调用者的样子等等......

于 2013-09-05T19:19:53.417 回答
0

这意味着您使用了一个当前为 null 或尚未实例化的对象。

那是高水平......基本上任何破坏的东西都可能包含一个空值。在它的一个步骤中设置一个断点,它的断点很可能是空的。

于 2013-09-05T19:13:39.777 回答
0

如果您有一个 Object,并且 Object 引用为 null,则调用方法或尝试访问该对象的属性将引发此错误。例如..

String myString = null;
string anotherString = myString.Substring(0,2); //this will throw an error.

你有一些代码作为例子吗?

于 2013-09-05T19:21:22.733 回答
0

作为一个极其常见的错误,您将很快学会如何处理它。基本上,这意味着您正在尝试使用不存在的东西。

这是一个例子:

    Dim lstNumbers As List(Of Integer)
    lstNumbers.Add(1)
    lstNumbers.Add(2)
    lstNumbers.Add(3)

当您运行此代码时,它将给出空引用异常并为您提供“对象引用未设置为对象的实例”。错误。这意味着您创建了一个名为“lstNumbers”的对象并告诉编译器它将是一个整数列表,但您实际上并没有创建该列表。本质上,您创建了一个占位符,但没有对象来保存任何东西。

要修复它,您必须创建对象本身。因此,在上面的示例中,您可以将其更改为:

    Dim lstNumbers As New List(Of Integer)
    lstNumbers.Add(1)
    lstNumbers.Add(2)
    lstNumbers.Add(3)

关键字告诉它创建一个新的New列表对象并将其分配给该空间。现在您可以添加它而不会出现任何错误。一些对象会初始化自己,例如字符串、整数等。

因此,对这些类型的错误进行故障排除的最佳建议是确定对象未设置为自身实例的原因。检查以确保您已使用 New 函数或将其设置为现有对象,例如:

    Dim lstNumbers As New List(Of Integer)
    lstNumbers.Add(1)
    lstNumbers.Add(2)
    lstNumbers.Add(3)

    Dim lstNumbers2 As List(Of Integer)
    lstNumbers2 = lstNumbers

您不需要在 lstNumbers2 上使用 New,因为您正在为其分配 lstNumbers。但是,如果您尝试以下操作,它将无法正常工作,因为 lstNumbers 尚未初始化:

    Dim lstNumbers As List(Of Integer)

    Dim lstNumbers2 As List(Of Integer)
    lstNumbers2 = lstNumbers
于 2013-09-05T19:22:40.900 回答