检查会话是否为空

33

我想要检查会话是否为空,例如:

if(Session["emp_num"] != null)
{

   if (!string.IsNullOrEmpty(Session["emp_num"].ToString()))
            {
                //The code
            }
}
或者只需这样。
 if(Session["emp_num"] != null)
    {

       // The code
    }

因为有时候当我只使用以下代码检查时:

       if (!string.IsNullOrEmpty(Session["emp_num"].ToString()))
                {
                    //The code
                }
我遇到了以下异常:

空引用异常


2
请查看以下帖子:https://dev59.com/QXVC5IYBdhLWcg3woCnN - Bobby
你的第一个检查应该是有效的和直接的。第二个检查不起作用,因为你试图将一个空对象转换为字符串,并在之后检查它是否为空。 - Jamesckel
6个回答

68

如果会话变量emp_num将存储一个字符串,请使用此代码:

 if (!string.IsNullOrEmpty(Session["emp_num"] as string))
 {
                //The code
 }

如果它不存储字符串,而是其他类型,那么在访问该值之前应该先检查是否为null,就像你的第二个示例中那样。


12
if (HttpContext.Current.Session["emp_num"] != null)
{
     // code if session is not null
}
  • 如果所有尝试都失败。

这似乎是处理像那样的值的最恰当方式。对吗?使用它应该包含的字符串值对我来说看起来不太干净。 - carloswm85

6
你需要在尝试将Session["emp_num"]转换为字符串之前检查它是否为null,否则您将会得到一个null引用异常。 我会选择你的第一个示例,但是你可以使其更加“优雅”。 有几种方法可供选择,但我想到的方法是:
if (Session["emp_num"] is string)
{
}
或者
if (!string.IsNullOrEmpty(Session["emp_num"] as string))
{
}

如果变量不存在或者不是字符串,那么这将返回null。


在较新的 C# 版本中,当使用 is 时,您可以为变量命名:if (Session["emp_num"] is string myString) { // myString 将不会为空 } - Peheje

2

首先,您应该检查会话中是否存在Session["emp_num"]

您可以询问会话对象其索引器是否具有emp_num值,或使用string.IsNullOrEmpty(Session["emp_num"])


2
如果这是一个简单的 Session,你可以直接应用 NULL 检查,如 Session["emp_num"] != null。 但如果这是一个列表项的 Session,那么你需要应用以下任一选项: 选项 1:
if (((List<int>)(Session["emp_num"])) != null && (List<int>)Session["emp_num"])).Count > 0)
 {
 //Your Logic here
 }
选项2:
List<int> val= Session["emp_num"] as List<int>;  //Get the value from Session.

if (val.FirstOrDefault() != null)
 {
 //Your Logic here
 }

1
检查C# MVC版本低于5的会话是否为空。
if (!string.IsNullOrEmpty(Session["emp_num"] as string))
{
    //cast it and use it
    //business logic
}
检查C# MVC版本5以上的会话是否为空。
if(Session["emp_num"] != null)
{
    //cast it and use it
    //business logic
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,