详细内容
"未将对象引用设置到对象的实例"异常的几种常见场合
发布日期:2010-05-28     点击:4227     字体:[ ]

在.net编程中,当我们使用一个并不存在的对象时,系统就会抛出这个异常:System.NullReferenceException: 未将对象引用设置到对象的实例。下面把几种常见的场合做下介绍:

1.没有传参数给当前页面,却在程序里直接获取

如果我们没有给页面传一参数,假设参数名为name,但我们直接在程序里用Request.QueryString["name"]获取,则必然出现未将对象引用设置到对象的实例异常,例如:

string name = Request.QueryString["name"].ToString();

要避免出现此类异常,可先进行参数是否为空判断:

 if (Request.QueryString["name"] != null)
{ string name = Request.QueryString["name"].ToString(); }

2.Session,ViewState等内置对象未定义时直接使用

当我们没有定义Session,ViewState时却直接引用,例如:

string name = Session["name"].ToString();

此时则也会引发“未将对象引用设置到对象的实例“异常,解决这类问题可先定义值,例如:

Session["name"] = "abc";

ViewState["name"] = "abc";

则此时再执行string name = Session["name"].ToString()则不会出现错误,当然在引用前进行是否为空判断,也是很必要的:

if (Session["name"] != null)
{ string name = Session["name"].ToString(); }

3.下拉列表不存在某值时却设置该值为选定状态

当我们要设定下拉列表某项为选定状态时,经常使用 this.ddl.Items.FindByValue("abc").Selected = true;

但是当下拉列表的项目中并不存在"abc"这一项时,则会引发“未将对象引用设置到对象的实例“异常,解决该类问题是应先判断下拉列表里是否存在该项,存在才可做此设置:

for (int i = 0; i < this.ddl.Items.Count; i++)
{
     if (this.ddl.Items[i].Value.Equals("abc"))
     { this.ddl.Items[i].Selected = true; break; }
}

4.记录集DataSet里不存在表格却直接引用

当我们将记录集绑定到GridView时,经常用到this.GridView1.DataSource = DataSet1.Tables[0].DefaultView;

但是当DataSet1里根本就不存在数据表时,则必然会引发“未将对象引用设置到对象的实例“异常,解决该类问题是在绑定前判断表格是否存在:

if(DataSet1.Tables.Count > 0)
{this.GridView1.DataSource = DataSet1.Tables[0].DefaultView;}

5.页面未定义控件,却在程序里直接引用

此种情况不多见,但也偶有发生,一般是修改页面时误操作,例如上例,如果我们不小心把GridView1删除了,则此时再执行

if(DataSet1.Tables.Count > 0)
{this.GridView1.DataSource = DataSet1.Tables[0].DefaultView;}

则定会引发“未将对象引用设置到对象的实例“异常,此时重新添加上GridView1控件即可。

 

 

 

 

 

用户评论
昵称 
内容  *
验证码   
   
相关文章 更多...  
Copyright © 2010 zdbase.com All Rights Reserved. 苏ICP备15039389号 可人软件设计