代码之家  ›  专栏  ›  技术社区  ›  m.edmondson

使用条件运算符?检查空会话变量

  •  3
  • m.edmondson  · 技术社区  · 14 年前

    请看下面的代码:

    System.Web.SessionState.HttpSessionState ss = HttpContext.Current.Session["pdfDocument"] ?? false;
    
            if ((Boolean)ss)
            {
                Label1.Text = (String)Session["docName"];
            }
    

    基本上,我想检查httpcontext.current.session[“pdfdocument”]是否不为空,如果不转换为布尔值,则检查它是否为true或false。

    我试图避免嵌套的if语句,并认为有一种更优雅的方法来实现它。因此,我只对包含条件的答案感兴趣?操作员。

    有什么小窍门吗?

    7 回复  |  直到 14 年前
        1
  •  3
  •   bniwredyc    14 年前

    为什么使用ss变量?

    这个怎么样:

    if (HttpContext.Current.Session["pdfDocument"] != null)
    {
        Label1.Text = (String)Session["docName"];
    }
    
        2
  •  2
  •   Akash Kava    14 年前
        object ss = HttpContext.Current.Session["pdfDocument"] ?? false; 
        if ((Boolean)ss) 
        { 
            Label1.Text = (String)Session["docName"]; 
        } 
    
        3
  •  1
  •   Tommy    14 年前

    不知道你到底在要求什么,怎么样:

    System.Web.SessionState.HttpSessionState ss;
    
    Label1.Text = (Boolean)((ss = HttpContext.Current.Session["pdfDocument"]) ?? false) ? (String)Session["docName"] : Label1.Text;
    

    应将ss保留为有效会话或空,避免尝试将false存储到ss的问题,并完全跳过后面的“if”。尽管有重复的label1.text。

    注意:已编辑此内容,以考虑下面Dave的评论。

        4
  •  0
  •   Douglas    14 年前

    问题是你不能这样做:

    SessionState.HttpSessionState ss = false;
    

    尝试将嵌套的ifs放入扩展方法中,然后改为调用该方法。

        5
  •  0
  •   David    14 年前

    HttpContext.Current.Session 是一个 System.Web.SessionState.HttpSessionState 对象,它是不同对象的散列或字典,有些人可能称之为它,因此除非您正在存储 HttpSessionState 对象作为“pdfdocument”位置,第一行不正确。

    如果你真的在存储 bool 在“pdfdocument”位置,可能已经存在,也可能不存在,您可以将其直接强制转换为bool,空值将其合并: var ss = (bool)(HttpContext.Current.Session["pdfDocument"] ?? false); .

    如果您可能在“pdfdocument”位置存储其他类型的对象,您可以通过检查空值来查看该对象当前是否在该位置: var ss = HttpContext.Current.Session["pdfDocument"] != null; .

        6
  •  0
  •   Ioannis Karadimas    14 年前

    你可以试试这个,尽管我不知道它是否符合你的审美观:

    bool isPdfDocumentSet =
         bool.TryParse((HttpContext.Current.Session["pdfDocument"] as string, 
             out isPdfDocumentSet)
                 ? isPdfDocumentSet
                 : false;
    

    编辑:实际上有一种更简洁的方法:

    bool isPdfDocumentSet =
         bool.TryParse(HttpContext.Current.Session["pdfDocument"] as string, 
              out isPdfDocumentSet) && isPdfDocumentSet;
    
        7
  •  -1
  •   danijels    14 年前

    我认为你最接近的解决方案是:

    System.Web.SessionState.HttpSessionState ss = HttpContext.Current.Session["pdfDocument"];
    if (ss != null)
    {
        Label1.Text = (String)Session["docName"];
    }