Используя условный оператор? проверить нулевую переменную сеанса - PullRequest
3 голосов
/ 13 октября 2010

Взгляните на этот код:

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

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

В основном я хочу проверить, не является ли HttpContext.Current.Session ["pdfDocument"] нулевым, и если он не приведен к логическому типу,затем проверьте, является ли оно истинным или ложным.

Я стараюсь избегать вложенных операторов if и полагал, что будет более элегантный способ сделать это.Поэтому меня интересуют только ответы, которые содержат условные?оператор.

Любые советы?

Ответы [ 7 ]

3 голосов
/ 13 октября 2010

Почему вы используете переменную ss?

Как насчет этого:

if (HttpContext.Current.Session["pdfDocument"] != null)
{
    Label1.Text = (String)Session["docName"];
}
2 голосов
/ 13 октября 2010
    object ss = HttpContext.Current.Session["pdfDocument"] ?? false; 
    if ((Boolean)ss) 
    { 
        Label1.Text = (String)Session["docName"]; 
    } 
1 голос
/ 13 октября 2010

Не совсем точно, что вы просите, как насчет:

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.

Примечание: это было отредактировано, чтобы учесть комментарий Дэйва ниже.

0 голосов
/ 13 октября 2010

HttpContext.Current.Session - это объект System.Web.SessionState.HttpSessionState, который представляет собой хеш или словарь, как некоторые его называют, различных объектов, поэтому, если вы не сохраняете объект HttpSessionState в качестве местоположения "pdfDocument" в первой строке неверно.

Если вы на самом деле храните bool в папке "pdfDocument", которая может быть, а может и не быть в этом слоте, вы можете привести ее непосредственно к bool и слить его в нуль: var ss = (bool)(HttpContext.Current.Session["pdfDocument"] ?? false);.

Если вы, возможно, храните какой-либо другой тип объекта в местоположении "pdfDocument", вы можете просто увидеть, находится ли он в данный момент в этом месте, проверив значение null: var ss = HttpContext.Current.Session["pdfDocument"] != null;.

0 голосов
/ 13 октября 2010

Вы можете попробовать это, хотя я не знаю, соответствует ли это вашей эстетике:

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;
0 голосов
/ 13 октября 2010

Я думаю, что ближе всего к решению, по которому будет идти этот путь:

System.Web.SessionState.HttpSessionState ss = HttpContext.Current.Session["pdfDocument"];
if (ss != null)
{
    Label1.Text = (String)Session["docName"];
}
0 голосов
/ 13 октября 2010

Проблема в том, что вы не можете сделать это:

SessionState.HttpSessionState ss = false;

Попробуйте поместить свои вложенные if в метод расширения, а затем вызовите его.

...