我收到这个错误,我不确定这意味着什么?

对象引用未设置为对象的实例。


当前回答

这个错误意味着什么?对象引用未设置为对象的实例。

确切地说,你试图使用一个空对象,就好像它是一个正确的 引用的对象。

其他回答

. net中的变量要么是引用类型,要么是值类型。值类型是基本类型,如整数和布尔值或结构(并且可以被标识,因为它们继承自System.ValueType)。布尔变量,当声明时,有一个默认值:

bool mybool;
//mybool == false

引用类型在声明时没有默认值:

class ExampleClass
{
}

ExampleClass exampleClass; //== null

如果试图使用空引用访问类实例的成员,则会得到System.NullReferenceException。这与对象引用不设置为对象的实例是一样的。

下面的代码是一个简单的方法来复制它:

static void Main(string[] args)
{
    var exampleClass = new ExampleClass();
    var returnedClass = exampleClass.ExampleMethod();
    returnedClass.AnotherExampleMethod(); //NullReferenceException here.
}

class ExampleClass
{
    public ReturnedClass ExampleMethod()
    {
        return null;
    }
}

class ReturnedClass
{
    public void AnotherExampleMethod()
    {
    }
}

这是一个非常常见的错误,可能因为各种原因而发生。根本原因实际上取决于您遇到的特定场景。

如果您使用的API或调用的方法可能返回null,那么优雅地处理这个问题就很重要。上面的main方法可以这样修改,使NullReferenceException永远不会被用户看到:

static void Main(string[] args)
{
    var exampleClass = new ExampleClass();
    var returnedClass = exampleClass.ExampleMethod();

    if (returnedClass == null)
    {
        //throw a meaningful exception or give some useful feedback to the user!
        return;
    }

    returnedClass.AnotherExampleMethod();
}

以上只是关于。net类型基础知识的提示,要获得更多信息,我建议您通过c#学习CLR,或者阅读同一作者Jeffrey Richter的这篇MSDN文章。还可以查看一个更复杂的例子,说明何时会遇到NullReferenceException。

一些使用Resharper的团队使用JetBrains属性来注释代码,以突出显示哪里是null(不)。

大多数情况下,当您尝试将值传入object时,如果值为空,则会发生这种异常。 请检查这个链接。

为了自我学习,你可以设置一些检查条件。就像

if (myObj== null)
Console.Write("myObj is NULL");

这个错误意味着什么?对象引用未设置为对象的实例。

确切地说,你试图使用一个空对象,就好像它是一个正确的 引用的对象。

说明你做了类似的事。

Class myObject = GetObjectFromFunction();

没有做

if(myObject!=null),你继续执行myObject. method ();

另一个简单的方法是:

 Person myPet = GetPersonFromDatabase();
 // check for myPet == null... AND for myPet.PetType == null
 if ( myPet.PetType == "cat" ) <--- fall down go boom!