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

What does "Object reference not set to an instance of an object" mean? [duplicate]

提问人:mohammad reza 提问时间:4/23/2009 最后编辑:John Saundersmohammad reza 更新时间:3/6/2017 访问量:2010661

问:

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

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

.NET NullReferenceException

评论

1赞 John Saunders 4/5/2014
几乎所有的情况都是一样的。有关一些提示,请参阅“什么是 .NET 中的 NullReferenceException?”NullReferenceException
0赞 Timur 3/8/2022
我在创建新视图时遇到了同样的错误,重新启动Visual Studio后,它消失了。

答:

9赞 dkpatt 4/23/2009 #1

不是直言不讳,但它的意思正是它所说的。其中一个对象引用为 NULL。当您尝试访问 NULL 对象的属性或方法时,将看到此内容。

评论

3赞 Jhonny D. Cano -Leftware- 4/23/2009
他可以抛出新的 NullReferenceException();哈哈......
53赞 Gavin Miller 4/23/2009
如果你知道一个对象是什么,一个引用和实例,它就意味着它所说的......在编程方面,所有的话都非常繁重。
7赞 J.W. 4/23/2009 #2

这意味着你做了这样的事情。

Class myObject = GetObjectFromFunction();

而且

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

2赞 TStamper 4/23/2009 #3

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

正如它所说的那样,您正在尝试使用一个 null 对象,就好像它是一个正确的对象一样 引用的对象。

评论

0赞 ZMAX 5/23/2019
如何更正此错误?
2赞 Syed Tayyab Ali 4/23/2009 #4

大多数情况下,当您尝试将值放入对象中时,如果值为 null,则会发生这种异常。 请查看此链接

为了自学,可以放一些检查条件。喜欢

if (myObj== null)
Console.Write("myObj is NULL");
206赞 Iain 4/23/2009 #5

.NET 中的变量要么是引用类型,要么是值类型。值类型是基元,例如整数布尔值或结构(可以识别,因为它们继承自 System.ValueType)。布尔变量在声明时具有默认值:

bool mybool;
//mybool == false

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

class ExampleClass
{
}

ExampleClass exampleClass; //== null

如果尝试使用 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 值(不是)预期的位置。

评论

2赞 Si8 5/12/2017
如果我在另一个类中有一个列表,例如:pastebin.com/aWhfu8UM。我收到错误Run-time exception (line 9): Object reference not set to an instance of an object.
0赞 Jud 5/18/2017
由于标签是 .net,但未指定语言,因此在 VB.Net 中常见的错误是简单地说而不是 .Dim exampleClass As exampleClassDim exampleClass As New exampleClass
0赞 JFreeman 4/16/2018
+1 - 谢谢你,非常深入和有帮助!我的问题是,在调用子过程之前,我没有启动我创建的类,但这帮助我弄清楚了!
23赞 Jay 4/23/2009 #6

另一种简单的方法可以得到这个:

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

评论

2赞 Iain 4/23/2009
Jay 的回答演示了此处任何其他答案未涵盖的另一个示例。
3赞 Liam 8/23/2013 #7

如果我有课程:

public class MyClass
{
   public void MyMethod()
   {

   }
}

然后我做:

MyClass myClass = null;
myClass.MyMethod();

第二行引发此异常,因为我正在引用类型对象上调用一个方法,该对象是(即尚未通过调用nullmyClass = new MyClass())

36赞 Adithya Kumaranchath 11/10/2014 #8

简而言之,它的意思是......您正在尝试访问一个对象而不实例化它。您可能需要先使用“new”关键字来实例化它,即创建它的实例。

例如:

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;

希望我说清楚了..

评论

1赞 Ali reza Soleimani Asl 3/14/2017
我认为这个答案是 NullException 的最佳答案。它保存了我的一个项目。