System.NullReferenceException: 未将对象引用设置到对象的实例

在调试程序时,出现了如下错误提示:

System.NullReferenceException: 未将对象引用设置到对象的实例(错误代码在Session所在行)

以下是网上查找到的解决思路及方法:

一个重要的知识点:“System.NullReferenceException: 未将对象引用设置到对象的实例”问题可能原因如下:

  • ViewState 对象为Null。
  • DateSet 空。
  • sql语句或Datebase的原因导致DataReader空。
  • 声明字符串变量时未赋空值就应用变量。
  • 未用new初始化对象。
  • Session对象为空。
  • 对控件赋文本值时,值不存在。
  • 使用Request.QueryString()时,所获取的对象不存在,或在值为空时未赋初始值。
  • 使用FindControl时,控件不存在却没有做预处理。
  • 重复定义造成未将对象引用设置到对象的实例错误.

我的错误是第六种,Session对象为空。

错误原因:在调用 Session["userid"].ToString()   前应先检查   Session["userid"]    对象是否为   null 

在未登录的情况下, Session["userid"]  的值是null,直接用ToString()方法肯定会出错的...

原来的代码:

protected void Page_Load(object sender, EventArgs e)
     {
             strIP = Request.UserHostAddress.ToString();
             strUserID = Session["userid"].ToString();
             strMessage = this.tbMessage.Text;
             strPostID = Request["postid"].ToString();
             strReplyTime = DateTime.Now.ToString(); 

     }
改正后的代码:

protected void Page_Load(object sender, EventArgs e)
     {
        if (Session["userid"] != null && Session["postid"] != null)
       {
             strIP = Request.UserHostAddress.ToString();
             strUserID = Session["userid"].ToString();
             strMessage = this.tbMessage.Text;
             strPostID = Request["postid"].ToString();
             strReplyTime = DateTime.Now.ToString();
         }

     }
以下是官方给出的解决方案

VisualStudio2005(c#)项目调试问题解决方案:System.NullReferenceException: 未将对象引用设置到对象的实例。

原因:

  • 所设置的变量为空值或没有取到值,一般出现在传递参数的时候出现这个问题,也会在使用datagrid或gridview或datalist等数据控件时出现.
  • 控件名称与codebehind里面的没有对应
  • 未用new初始化对象
  • 在程序中所引用的控件不存在
解决方法:
  • 使用try..catch...finally捕捉错误,或直接用response.write()输出所取的变量值
  • 查看代码中是否存在未初始化的变量
关键词: C# VisualStudio2005