2012-07-26 3 views
2

개체 MyObject가 있는데이를 세션에 저장하고 있습니다. "as"를 사용하여 개체를 캐스팅 한 후에도 오류가 발생합니다.

나는이 쓰기 : 나는 오류 Object reference not set to an instance of an object 왜납니다

MyObject TheObject = HttpContext.Current.Session["TheObjInSession"] as MyObject; 

? 나는 당신이 as을 사용하여 캐스팅을하고 캐스트가 에러를 발생 시킨다면 null을 반환하고 실행이 계속된다고 생각했습니다. 이 행을 어떻게 다시 작성해야합니까?

의견을 보내 주셔서 감사합니다.

추신 : 사용 세션 줄을 제거했기 때문에 오류가 발생했습니다. [WebMethod(EnableSession = true)] 줄을 다시 넣을 것이지만 문제가 발생하면 예외가 없는지 확인하고 싶습니다.

답변

4

가능성이있는 것은 Session입니다 (존재하지 않거나 아직 설정되지 않았습니다). 세션을 관리하도록 클래스를 표시하지 않은 경우 핸들러에서 일반적입니다.

예, 맞습니다. null의 캐스팅 또는 결과가 시도되지만, 이는 왼손 오브젝트가 유효하고 캐스팅을 시도 할 가치가 있다고 가정 한 것입니다.

깊이에 좀 더 그것을 설명하려면 기본적으로 자체가 존재하지 않는 Session 경우 불가능 Session 요소 오프 키를 참조한다

HttpContext.Current.Session["Foo"] 
HttpContext       Probably fine 
HttpContext.Current     May not exist 
HttpContext.Current.Session   Most likely cause (no access to session) 

합니다.

+0

사용 세션 줄 [WebMethod (EnableSession = true)]을 제거했기 때문에 오류가 발생합니다. 물론, 나는 그 줄을 되돌려 놓을 것이다. 그러나 왜 그 줄잡이가 오류를 던집니 까? – frenchie

+0

@frenchie : 'WebMethodAttribute'를 대체하고 핸들러 접근을 허용하면 괜찮을 것입니다. 나는 확고한 신자이지만 실제로는 완벽합니다. 또는 기본적으로 "시도하고 직접보십시오". 또한 이것은 HttpContext의 정적 멤버에 액세스하는 대신 'Session' 속성을 참조하는 것만으로도 괜찮을 웹 서비스입니다. –

+0

세션이 null이거나 작동하지 않는 경우 코드를 안전하게 만들려고합니다. 이 경우, 웹 서비스를 "멋지게"종료하는 코드 분기가 있습니다. 이제 캐스트가 실패하면 예외가 발생합니다. – frenchie

관련 문제