我收到此错误,我不确定这是什么意思?
对象引用未设置为对象的实例。
答案 0 :(得分:153)
.NET中的变量是引用类型或值类型。值类型是基元,例如integers和booleans或结构(并且可以识别,因为它们继承自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类型基础知识的提示,有关详细信息,我建议您选择CLR via C#或由同一作者Jeffrey Richter阅读此MSDN article。当你遇到NullReferenceException时,还要检查更复杂的example。
一些使用Resharper的团队使用JetBrains attributes来注释代码以突出显示(非)预期的空位。
答案 1 :(得分:17)
另一种简单的方法:
Person myPet = GetPersonFromDatabase();
// check for myPet == null... AND for myPet.PetType == null
if ( myPet.PetType == "cat" ) <--- fall down go boom!
答案 2 :(得分:14)
简而言之,它意味着..您试图访问一个对象而不实例化它。您可能需要使用&#34; new&#34;首先实例化它的关键字,即创建它的实例。
例如:
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;
希望我说清楚。
答案 3 :(得分:10)
不要生硬,但这正是它所说的。您的一个对象引用是NULL。当您尝试访问NULL'd对象的属性或方法时,您会看到这一点。
答案 4 :(得分:4)
这意味着你做了类似的事情。
Class myObject = GetObjectFromFunction();
没有做
if(myObject!=null)
,您继续myObject.Method();
答案 5 :(得分:1)
这个错误是什么意思?对象引用未设置为对象的实例。
正是它所说的,你正试图使用一个空对象,好像它是正确的 引用对象。
答案 6 :(得分:1)
大多数情况下,当您尝试将值分配给对象时,如果值为null,则会发生此类异常。 请检查this link。
为了自学,你可以提出一些检查条件。像
if (myObj== null)
Console.Write("myObj is NULL");
答案 7 :(得分:1)
如果我有班级:
public class MyClass
{
public void MyMethod()
{
}
}
然后我做了:
MyClass myClass = null;
myClass.MyMethod();
第二行抛出此异常,因为我在null
myClass = new MyClass()
对象上调用了一个方法(即{{1}}未调用{{1}} < / p>