“对象引用未设置为对象的实例”是什么意思?

时间:2009-04-22 20:32:38

标签: .net nullreferenceexception

我收到此错误,我不确定这是什么意思?

  

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

8 个答案:

答案 0 :(得分:153)

.NET中的变量是引用类型或值类型。值类型是基元,例如integersbooleans或结构(并且可以识别,因为它们继承自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的方法,则处理此正常非常重要。可以修改上面的主要方法,以便用户永远不会看到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类型基础知识的提示,有关详细信息,我建议您选择CLR via C#或由同一作者Jeffrey Richter阅读此MSDN article。当你遇到NullReferenceException时,还要检查更复杂的example

一些使用Resharper的团队使用JetBrains attributes来注释代码以突出显示(非)预期的空位。

答案 1 :(得分:17)

另一种简单的方法:

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

答案 2 :(得分:14)

简而言之,它意味着..您试图访问一个对象而不实例化它。您可能需要使用&#34; new&#34;首先实例化它的关键字,即创建它的实例。

例如:

public class MyClass
{
   public int Id {get; set;}
}

MyClass myClass;

myClass.Id = 0; <----------- An error will be thrown here.. because myClass is null here...

你必须使用:

myClass = new MyClass();
myClass.Id = 0;

希望我说清楚。

答案 3 :(得分:10)

不要生硬,但这正是它所说的。您的一个对象引用是NULL。当您尝试访问NULL'd对象的属性或方法时,您会看到这一点。

答案 4 :(得分:4)

这意味着你做了类似的事情。

Class myObject = GetObjectFromFunction();

没有

if(myObject!=null),您继续myObject.Method();

答案 5 :(得分:1)

  

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

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

答案 6 :(得分:1)

大多数情况下,当您尝试将值分配给对象时,如果值为null,则会发生此类异常。 请检查this link

为了自学,你可以提出一些检查条件。像

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

答案 7 :(得分:1)

如果我有班级:

public class MyClass
{
   public void MyMethod()
   {

   }
}
然后我做了:

MyClass myClass = null;
myClass.MyMethod();

第二行抛出此异常,因为我在null myClass = new MyClass()对象上调用了一个方法(即{{1}}未调用{{1}} < / p>