检查会话变量是否为null返回nullreferenceexception

时间:2014-01-29 14:02:11

标签: c# session

我有一个存储在会话变量中的对象列表。但是当我检查以确保会话变量不为null时,它会给我一个NullReferenceException: Object reference not set to an instance of an object

if(Session["object"] == null)  //error occurs here
{
     Session["object"] = GetObject();
     return Session["object"] as List<object>;
}
else
{
    return Session["object"] as List<object>;
}

如何检查Session是否为空?

编辑:我也试过

if(Session["object"] != null)

4 个答案:

答案 0 :(得分:6)

  

编辑:我也试过

if(Session["object"] != null)

请注意,修改中的代码,检查Session是否为空。如果它为null,则表达式Session["object"]仍然会导致错误,因为这是在会话实例中搜索“对象”键 - 所以如果从逻辑上考虑它,您正在寻找未实例化对象中的键,因此空引用异常。因此,在检查Session是否为空之前,您需要验证Session["object"]是否已实例化:

if (Session != null)
{
    if(Session["object"] == null)
    {
         Session["object"] = GetObject();
         return Session["object"] as List<object>;
    }
    else
    {
        return Session["object"] as List<object>;
    }
}
else
{
    return null;
}

答案 1 :(得分:0)

您是否检查过Session != null?在您的示例中,this.Sessionthis.Session["Key"]都可以返回null,但您只检查后者。考虑Session本身可能不存在的选项,因此您无法从中获取数据,但也无法写入数据。

答案 2 :(得分:0)

让你检查你的GetObject()方法......它可能会返回null ...

答案 3 :(得分:0)

检查if (!Session.ContainsKey("object"))后尝试检查if (Session != null)。如果这些检查都通过,那么Session["object"]应该没问题。