2013-10-28 11 views
0

C#을 사용 변수, asp.net을 처리하지 내가 (테스트 용) site.master에 수동으로 할당 된 세션 변수가 있습니다. 나는 같은 값 설정 : 세션 [ "용자 ID"] = 내 웹 페이지에서 (INT) 번호string.IsNullOrEmpty() 메소드는</p> <p>VWD 2010 년 세션 제대로

을, 나는 다음과 같은 코드가 있습니다 실행하는 동안

 litmsg.Text = "userid = " + Session["userid"].ToString(); 

     if (string.IsNullOrEmpty(Session["userid"] as string)) 
     { 
      Session["errmsg"] = "No user ID is specified"; 
      litmsg.Text = litmsg.Text + " inside loop"; 
      // Response.Redirect("/PageError.aspx"); 
     } 
     return; 

이 litmsg.Text의 값이있는 올바른 사용자 아이디. Session [ "userid"]에 값이 있어야 함을 알려줍니다. 그러나 값이 있으면 string.IsNullOrEmpty()가 false를 반환하여 본문이 실행되지 않아야하며 "inside loop"구문을 보지 않아야합니다.

string.IsNullOrEmpty는()도 내 PageError 페이지에 실패 할 것 같다, 그것은 내가 세션 값 [ "errmess을"] 설정 한 경우에도 지정되지 않은 메시지를보고이 경우

protected void Page_Load(object sender, EventArgs e) 
{ 
     if (!Page.IsPostBack) 
     { 
      string strErrMess = string.IsNullOrEmpty(Session["errmess"] as string) ? 
        "Unspecificed error message" : 
        Session["errmess"].ToString(); 

      errmess.Text = strErrMess; 
     } 
} 

.

다른 문맥에서이 관용구를 사용하고 있는데 제대로 작동하는 것 같습니다. 세션 변수에 적용 할 때만 문제가 있습니다. 내가 빠진 부분이 있습니까?

세션 변수와 함께 사용하면 이전 버전의 버그에 대한 참조가 발견되었지만 현재 버전에서는 버그가 수정되었음을 나타냅니다. 예를 들어, 여기 : C# String.IsNullOrEmpty: good or bad?

나는 다른 곳에서 이미 사용하고 있으므로이 관용구를 좋아합니다. 이 작업을 수행하는 더 좋은 방법이 있습니까? 하나는 작동합니까? 아니면 내가 뭔가 잘못하고있는 것 같아.

+0

문자열인지 아닌지 확인하기 전에 ToString()을 호출하지 않습니다. 'int'값으로 지정 했으므로 문자열이 아닙니다. –

+0

값이 null 인 경우 ToString()이 실패 할 수 있다고 생각했습니다. – elbillaf

답변

3

시도 :

string strErrMess = (Session["errmess"] == null) 
    ? "Unspecificed error message" 
    : Session["errmess"].ToString(); 

당신은이 널인지 테스트하기 전에 문자열로 캐스팅되어 있으므로 오류를 던지고.

+0

제 경우에는 감각을 뒤집습니다 == null || == ""하지만 작동합니다! 감사합니다. – elbillaf

+0

확실한 것. 실패 할 경우 오른쪽 사이드가 평가되지 않으므로 항상 null 체크를 먼저 수행하십시오 (따라서 예외가 발생하지 않음) – Jonesopolis

1

intstring에 입력하면 해당 유형으로 변환 할 수 없으므로 null 참조가됩니다. 따라서 string.IsNullOrEmpty 메서드는 true를 반환합니다.