在使用.Net进行编程时,经常会出现类似如下的代码:
... {
private string _objStr;
public string ObjStr
...{
get
...{
return _objStr;
}
set
...{
_objStr = value;
}
}
public int test()
...{
return _objStr.Length; //问题出现了!考虑当_objStr为null的情况会怎么样呢?
}
}
假设有如下对该方法的调用:
testObj.test(); // 看似正常的代码,其实这里会出现异常
运行后的结果:Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error:
|
Source File: ...../Visual Studio 2005/Projects/study1/Study1Core/Utility/Test.cs Line: 24
Stack Trace:
|
为什么上面的代码会报错呢?其实很简单,因为testObj的私有成_objStr此时为null,而testObj的test()方法调用了它的Length属性。试问,null有Length属性?
Server Error in '/Study1' Application.
Object reference not set to an instance of an object.
那么该如何解决上面的问题呢?
有两种方法(这里Object表示某一个对象):
1.使用 Object != null 语句。 即每次在调用一个对象的属性之前,都要养成习惯,先判断一下Object 是否为空,只有当Object不为空的时候才调用它的方法或属性,否则应该给出错误处理的代码。
2.保证 Object永远不为空。显然这种方法控制起来更加困难。
如果按照上面的方法来做,那么原先的Test类的代码就变成了
... {
private string _objStr;
public string ObjStr
...{
get
...{
return _objStr;
}
set
...{
_objStr = value;
}
}
public int test()
...{
if (_objStr != null)
...{
return _objStr.Length;
}
else
...{
return 0; //当_objStr为null时,返回0
}
}
}
这样做虽然代码长度会有所增加,但是能够大大提高程序的健壮性何乐而不为呢?
后话,对于一名程序员,在编写代码的时候保证程序具有一定的健壮性,应该是一种责任。