Iai*_*ain 160
.NET中的变量是引用类型或值类型.值类型是原语,例如整数和布尔值 或结构(并且可以识别,因为它们从System.ValueType继承).声明时,布尔变量具有默认值:
bool mybool;
//mybool == false
Run Code Online (Sandbox Code Playgroud)
声明时,引用类型没有默认值:
class ExampleClass
{
}
ExampleClass exampleClass; //== null
Run Code Online (Sandbox Code Playgroud)
如果您尝试使用null引用访问类实例的成员,则会得到System.NullReferenceException.与未设置为对象实例的Object引用相同.
以下代码是一种简单的再现方式:
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()
{
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个非常常见的错误,可能因各种原因而发生.根本原因实际上取决于您遇到的具体情况.
如果您正在使用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();
}
Run Code Online (Sandbox Code Playgroud)
所有上述内容实际上只是.NET类型基础知识的提示,有关详细信息,我建议您通过C#获取CLR或者阅读同一作者的这篇MSDN文章 - Jeffrey Richter.还可以查看更复杂的例子,了解何时遇到NullReferenceException.
一些使用Resharper的团队利用JetBrains属性来注释代码,以突出显示(非)预期的空位.
Jay*_*Jay 20
另一个简单的方法来获得这个:
Person myPet = GetPersonFromDatabase();
// check for myPet == null... AND for myPet.PetType == null
if ( myPet.PetType == "cat" ) <--- fall down go boom!
Run Code Online (Sandbox Code Playgroud)
小智 17
简而言之,它意味着..您正在尝试访问一个对象而不实例化它.您可能需要使用"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...
Run Code Online (Sandbox Code Playgroud)
你将不得不使用:
myClass = new MyClass();
myClass.Id = 0;
Run Code Online (Sandbox Code Playgroud)
希望我说清楚..
dkp*_*att 10
不要生硬,但这正是它所说的.您的一个对象引用是NULL.当您尝试访问NULL'd对象的属性或方法时,您会看到这一点.
这意味着你做了这样的事情。
Class myObject = GetObjectFromFunction();
Run Code Online (Sandbox Code Playgroud)
而没有做
if(myObject!=null),你继续做 myObject.Method();
| 归档时间: |
|
| 查看次数: |
1273138 次 |
| 最近记录: |