“对象引用没有设置为对象的实例”是什么意思?
我收到这个错误,我不确定这是什么意思?
你调用的对象是空的。
.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()
) 实例化的方法)