What does “Object reference not set to an instance of an object” mean?
我收到这个错误,我不确定它是什么意思?
Object reference not set to an instance of an object.
.NET中的变量是引用类型或值类型。值类型是诸如整数、布尔值或结构之类的基元(可以标识,因为它们继承自System.ValueType)。布尔变量在声明时具有默认值:
1 2 | bool mybool; //mybool == false |
引用类型在声明时没有默认值:
1 2 3 4 5 | class ExampleClass { } ExampleClass exampleClass; //== null |
如果尝试使用空引用访问类实例的成员,则会得到System.NullReferenceException。与未设置为对象实例的对象引用相同。
以下代码是一种简单的复制方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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或调用可能返回空值的方法,那么必须优雅地处理它。可以修改上面的主要方法,这样用户就不会看到NullReferenceException:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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属性对代码进行注释,以突出需要(不是)空值的地方。
另一个简单的方法是:
1 2 3 | Person myPet = GetPersonFromDatabase(); // check for myPet == null... AND for myPet.PetType == null if ( myPet.PetType =="cat" ) <--- fall down go boom! |
简而言之,这意味着……您试图在不实例化对象的情况下访问该对象。您可能需要首先使用"new"关键字来实例化它,即创建它的实例。
例如:
1 2 3 4 5 6 7 8 | public class MyClass { public int Id {get; set;} } MyClass myClass; myClass.Id = 0; <----------- An error will be thrown here.. because myClass is null here... |
您必须使用:
1 2 | myClass = new MyClass(); myClass.Id = 0; |
希望我说的清楚。
不要直截了当,但它的意思正是它所说的。对象引用之一为空。当您尝试访问一个空对象的属性或方法时,您会看到这一点。
这意味着你做了这样的事。
1 | Class myObject = GetObjectFromFunction(); |
而且不做
如果我有课:
1 2 3 4 5 6 7 | public class MyClass { public void MyMethod() { } } |
然后我这样做:
1 2 | MyClass myClass = null; myClass.MyMethod(); |
第二行引发此异常,因为我正在对引用类型对象(即
大多数情况下,当您试图将值赋给对象时,如果该值为空,则会发生这种异常。请检查此链接。
为了自学,你可以设置一些检查条件。喜欢
1 2 | if (myObj== null) Console.Write("myObj is NULL"); |
what does this error mean? Object reference not set to an instance of an object.
正如它所说,您试图使用一个空对象,就好像它是一个正确的引用的对象。