对象引用未设置为对象的实例 - 解释?

时间:2013-09-05 19:11:55

标签: .net

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

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

我需要高级解释。

5 个答案:

答案 0 :(得分:3)

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

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

因此,我将string定义为null,然后尝试访问其Length属性。发生异常。如果我在null string上使用了ToString()之类的方法,也会发生异常。

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

答案 1 :(得分:1)

没有一般步骤 - 这些问题通常存在于代码的逻辑中,而且变化太大而无法实现“一刀切”的解决方案。

您可以做的一件事是,当抛出此异常时进入调试器(在DEBUG / Exceptions下启用NullReferenceException),查看哪个对象是null,然后尝试找出为什么就是这样,通过检查对象,也许上去调用堆栈,看看调用者的样子等......

答案 2 :(得分:0)

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

这就是高水平....基本上任何破碎都可能包含空值。在它的一个步骤中设置一个断点,并且它的中断可能是空的。

答案 3 :(得分:0)

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

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

您是否有一些代码作为示例?

答案 4 :(得分: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