调用对象属性(或方法)保证健壮性的一个小技巧——使Object != null

 在使用.Net进行编程时,经常会出现类似如下的代码:

     public   class  Test
    
{
        
private string _objStr;
        
public string ObjStr
        
{
            
get 
            
{
                
return _objStr;
            }

            
set 
            
{
                _objStr 
= value;
            }

        }


        
public int test()
        
{
            
return _objStr.Length;     //问题出现了!考虑当_objStr为null的情况会怎么样呢?
        }

    }

假设有如下对该方法的调用:

Test  testObj   =   new  Test();
 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:

Line 22:         public int test()
Line 23: {
Line 24: return _objStr.Length;
Line 25: }
Line 26: }

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类的代码就变成了

     public   class  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
            }

        }

    }

这样做虽然代码长度会有所增加,但是能够大大提高程序的健壮性何乐而不为呢?

后话,对于一名程序员,在编写代码的时候保证程序具有一定的健壮性,应该是一种责任。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值