看看这段代码:
System.Web.SessionState.HttpSessionState ss = HttpContext.Current.Session["pdfDocument"] ?? false;
if ((Boolean)ss)
{
Label1.Text = (String)Session["docName"];
}
基本上我想检查HttpContext.Current.Session [“pdfDocument”]是否为空,如果不是要转换为布尔值,则检查它是真还是假。
我正在尝试避免使用嵌套的if语句,并认为可以采用更优雅的方式来实现它。因此,我只对包含条件的答案感兴趣?操作
任何提示?
答案 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"];
}