2014-01-29 3 views
4

У меня есть список объектов, хранящихся в переменной сеанса. Но когда я проверяю, чтобы переменная сеанса не была нулевой, она дает мне NullReferenceException: Object reference not set to an instance of an object.проверка, если переменная session равна null возвращает nullreferenceexception

if(Session["object"] == null) //error occurs here 
{ 
    Session["object"] = GetObject(); 
    return Session["object"] as List<object>; 
} 
else 
{ 
    return Session["object"] as List<object>; 
} 

Как проверить, является ли сеанс нулевым?

редактировать: Я также попытался

if(Session["object"] != null) 
+2

Вы проверили, что 'Session' не равно нулю? –

+1

Вы уверены, что ваша ошибка происходит внутри линии с вашим if-условием? –

+2

Какой объект является «нулевым»? Основываясь на описании, это похоже на то, что 'Session' сам по себе является« null », что означает, что в этом контексте нет * сессии' Session'. – David

ответ

6

редактировать: Я также попытался

if(Session["object"] != null) 

Обратите внимание, что код в вашем редактирования не проверки того, что Session не является нулевым. Если это значение равно нулю, выражение Session["object"] все равно вызовет ошибку, потому что это поиск экземпляра сеанса для ключа «объект» - поэтому, если вы думаете об этом логически, вы ищете ключ в неизведанном объекте, следовательно, исключение нулевой ссылки , Поэтому вам необходимо проверить Session был экземпляр перед проверкой, если Session["object"] равно нулю:

if (Session != null) 
{ 
    if(Session["object"] == null) 
    { 
     Session["object"] = GetObject(); 
     return Session["object"] as List<object>; 
    } 
    else 
    { 
     return Session["object"] as List<object>; 
    } 
} 
else 
{ 
    return null; 
} 
+0

Надеюсь, мы увидим монадическую нулевую проверку, реализованную на C# 6.0, чтобы упростить это. :) – DanteTheEgregore

0

Вы проверили, если Session != null? В вашем примере оба this.Session и this.Session["Key"] могут вернуть null, но вы проверили только последний. Учтите, что сам Session может не существовать, поэтому вы не можете получать данные от него, но также не можете писать на него.

+1

Да, у меня, похоже, не работает либо – Mike

+2

@Mike: Определите «У меня есть» и «похоже, не работает». Согласно вашему описанию, сам 'Session' выглядит как« null ». Что вы пробовали? Как это не сработало? Что вы пытаетесь сделать здесь? – David

+0

, кстати, это должен быть комментарий не ответ –

0

у вас проверить свой метод GetObject() ... он может возвращать нуль ...

+0

Это скорее комментарий, чем ответ ... – manuell

0

Попробуйте проверить if (!Session.ContainsKey("object")) после проверки if (Session != null). Если эти проверки проходят, то Session["object"] должны быть в порядке.

Смежные вопросы