首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"Object reference not set to an object instance“是什么意思?

"Object reference not set to an object instance“是什么意思?
EN

Stack Overflow用户
提问于 2009-04-22 20:32:38
回答 8查看 1.7M关注 0票数 231

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

未将

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

EN

回答 8

Stack Overflow用户

发布于 2009-04-22 20:51:51

.NET中的变量可以是引用类型,也可以是值类型。值类型是诸如integersbooleans之类的原语或结构(可以识别,因为它们继承自System.ValueType。布尔型变量在声明时有一个默认值:

代码语言:javascript
复制
bool mybool;
//mybool == false

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

代码语言:javascript
复制
class ExampleClass
{
}

ExampleClass exampleClass; //== null

如果您尝试使用空引用访问类实例的成员,则会得到一个System.NullReferenceException。这与未设置为对象实例的对象引用相同。

下面的代码是一种简单的再现方法:

代码语言:javascript
复制
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永远不会被用户看到:

代码语言:javascript
复制
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。此外,还可以查看更复杂的example,了解何时会遇到NullReferenceException。

一些使用Resharper的团队利用JetBrains attributes来注释代码,以突出显示哪里是(不)期望的空值。

票数 195
EN

Stack Overflow用户

发布于 2014-11-10 16:24:53

简而言之,这意味着..。您正在尝试访问一个对象,但没有实例化它。您可能需要使用"new“关键字首先实例化它,即创建它的一个实例。

例如:

代码语言:javascript
复制
public class MyClass
{
   public int Id {get; set;}
}

MyClass myClass;

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

您必须使用:

代码语言:javascript
复制
myClass = new MyClass();
myClass.Id = 0;

希望我说得很清楚..

票数 27
EN

Stack Overflow用户

发布于 2009-04-22 21:39:21

另一种简单的方法是:

代码语言:javascript
复制
 Person myPet = GetPersonFromDatabase();
 // check for myPet == null... AND for myPet.PetType == null
 if ( myPet.PetType == "cat" ) <--- fall down go boom!
票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/779091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档