2010-09-08 9 views
1

Привет, ребята У меня есть функция внутри класса утилиты, которая возвращает текущий идентификатор пользователя сеанса. Он бросает ссылку на объект, не установленную на экземпляр объекта? Как я могу проверить его на null & удалить эту ошибку?Проверьте перед сеансом перед возвратом?

public static string GetSessionUserID 
{ 
    get 
    { 
     string userID = ""; 
     if (System.Web.HttpContext.Current.Session["userID"].ToString() != null) 
     { 
      userID = System.Web.HttpContext.Current.Session["userID"].ToString(); 
     } 
     if (userID == null) 
     { 
      throw new ApplicationException("UserID is null"); 
     } 
     else 
      return userID; 
    } 
} 

ответ

6
object userID = System.Web.HttpContext.Current.Session["userID"]; 
if (userID == null) 
{ 
    throw new ApplicationException("UserID is null"); 
} 
return userID.ToString(); 

Если объект хранится в сессии, на самом деле уже строки, вы можете обойтись без ToString. Причиной ошибки является просто то, что вы не можете вызвать ToString по нулевой ссылке. Вот почему вышеуказанные проверки перед этим.

+0

Спасибо Мэтью. Объяснение было действительно полезно. Вы имели в виду объект вместо var? –

+0

@Popo, они должны быть эквивалентными (компилятор заменит 'var' на' object'). Однако я согласен с тем, что здесь «объект» более ясен. –

+0

Спасибо, Мэтью. Я пред. Мысль var существовал только в javascript. –

0

использование "попробовать" вместо "если"

string userID = ""; 
try{ 
      userID = System.Web.HttpContext.Current.Session["userID"].ToString(); 
} 
catch{ 
      throw new ApplicationException("UserID is null"); 
} 
return userID; 
+1

^^ Это не рекомендуется, почему добавить ненужный блок catch try, когда он может быть обработан в противном случае. – Dienekes

+0

@Dienekes Это интересный момент, из-за темы. см. видео http://www.youtube.com/watch?v=XcTKR_QhEoE. там было проведено тестирование со скамейками. а также http://stackoverflow.com/questions/1347848/c-real-time-try-catch Как-то я согласен с вами, но это не всегда необходимо. –

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