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

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

你调用的对象是空的。

.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的方法,那么正确处理这一点很重要。 上面的主要方法可以被修改,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属性来注释代码,以突出显示空位(不)的预期位置。

另一个简单的方法来得到这个:

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

不要生硬,但它意味着它说什么。 你的一个对象引用是NULL。 当您尝试访问NULL'd对象的属性或方法时,您会看到此内容。

简而言之,它的意思是..你正试图访问一个对象,而没有实例化它。你可能需要使用“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; 

希望我明确..

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

 Class myObject = GetObjectFromFunction(); 

没有这样做

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

大多数情况下,当你试图将值分配给对象时,如果值为空,则会发生这种异常。 请检查这个链接 。

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

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

这个错误是什么意思? 你调用的对象是空的。

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

如果我有班级:

 public class MyClass { public void MyMethod() { } } 

然后我做:

 MyClass myClass = null; myClass.MyMethod(); 

第二行抛出这个异常,因为我调用一个引用类型的对象是null (即没有通过调用myClass = new MyClass() ) 实例化的方法)