15

我正在尝试确定Session变量是否存在,但出现错误:

System.NullReferenceException:对象引用未设置为对象的实例。

代码:

    // Check if the "company_path" exists in the Session context
    if (System.Web.HttpContext.Current.Session["company_path"].ToString() != null)
    {
        // Session exists, set it
        company_path = System.Web.HttpContext.Current.Session["company_path"].ToString();
    }
    else
    {
        // Session doesn't exist, set it to the default
        company_path = "/reflex/SMD";
    }

那是因为Session名称“company_path”不存在,但我检测不到!

4

3 回答 3

37

如果要检查 Session["company_path"] 是否为空,请不要使用 ToString()。作为if Session["company_path"] is null then Session["company_path"].ToString() will give you exception.

改变

if (System.Web.HttpContext.Current.Session["company_path"].ToString() != null)
{
    company_path = System.Web.HttpContext.Current.Session["company_path"].ToString();
}
else
{
    company_path = "/reflex/SMD";
}

if (System.Web.HttpContext.Current.Session["company_path"]!= null)
{
      company_path = System.Web.HttpContext.Current.Session["company_path"].ToString();
}
else
{
      company_path = "/reflex/SMD";
}
于 2012-10-19T10:09:37.137 回答
3

这可以在最新版本的 .NET 中使用 null-conditional?.和 null-coalesce来解决??

// Check if the "company_path" exists in the Session context
company_path = System.Web.HttpContext.Current.Session["company_path"]?.ToString() ?? "/reflex/SMD";

链接:

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-coalescing-operator https://docs.microsoft.com/en-us/dotnet/csharp/language-reference /operators/null 条件运算符

于 2018-10-04T09:22:24.230 回答
0

如果在 Azure 上部署(截至 2017 年 8 月),还可以检查是否填充了会话密钥数组,例如:

Session.Keys.Count > 0 && Session["company_path"]!= null
于 2017-08-12T12:36:42.307 回答