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

时间:2010-10-13 12:00:19

标签: c# session session-variables ternary-operator conditional-operator

看看这段代码:

System.Web.SessionState.HttpSessionState ss = HttpContext.Current.Session["pdfDocument"] ?? false;

        if ((Boolean)ss)
        {
            Label1.Text = (String)Session["docName"];
        }

基本上我想检查HttpContext.Current.Session [“pdfDocument”]是否为空,如果不是要转换为布尔值,则检查它是真还是假。

我正在尝试避免使用嵌套的if语句,并认为可以采用更优雅的方式来实现它。因此,我只对包含条件的答案感兴趣?操作

任何提示?

7 个答案:

答案 0 :(得分:3)

为什么使用ss变量?

这个怎么样:

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

不确定你要求的是什么,怎么样:

System.Web.SessionState.HttpSessionState ss;

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

应该让ss具有有效会话或null,避免尝试将false存储到ss并完全跳过后续'if'的问题。虽然有重复的Label1.Text。

注意:这已经过编辑,以考虑下面Dave的评论。

答案 3 :(得分:0)

问题在于你不能这样做:

SessionState.HttpSessionState ss = false;

尝试将嵌套的ifs放入扩展方法,然后再调用它。

答案 4 :(得分:0)

你可以试试这个,虽然我不知道它是否适合你的美学:

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;

答案 5 :(得分:0)

HttpContext.Current.Session是一个System.Web.SessionState.HttpSessionState对象,它是一个可以称之为不同对象的哈希或字典,所以除非你将HttpSessionState对象存储为“ pdfDocument“第一行的位置不正确。

如果您实际上在{pdfDocument'位置存储了bool,该位置可能已经或可能不在此广告位中,您可以将其直接转换为bool并将其合并为空:var ss = (bool)(HttpContext.Current.Session["pdfDocument"] ?? false);

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

答案 6 :(得分:-1)

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

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