2011-02-04 70 views
10

我使用C#如何Session變量轉換爲整數類型在C#

我想檢查我的登錄嘗試是否不超過3個,我指的是以下條件

if (((int)Session["LoginAttempt"]) != 3) 
{ 
} 

在登錄失敗條件我做增量象下面這樣:

Session["LoginAttempt"] = ((int) Session["LoginAttempt"]) + 1; 

但它給我錯誤「對象引用不設置到對象的實例。」

請建議!

回答

16

對不起你們,

我只是改變了整數轉換代碼

((int) Session["LoginAttempt"]) 

Convert.ToInt32(Session["LoginAttempt"]) + 1; 

,現在它爲我工作正常,請建議櫃面的它的任何問題。

謝謝!

4

您需要測試以確定Session變量是否存在,然後才能使用它並分配給它。

在這裏,你正在做的增量:

Session["LoginAttempt"] = ((int) Session["LoginAttempt"]) + 1;

但是,如果Session["LoginAttempt"]不存在,這將解釋你的錯誤。增量前快速null測試應該整理出來。

if (Session["LoginAttempt"] != null) 
    Session["LoginAttempt"] = ((int)Session["LoginAttempt"]) + 1; 
0

在嘗試檢索和/或增加它之前,您是否在某種程度上初始化它?

0

把你的平凡的代碼部分:

int sessionLogicAttempt = (int)Session["LoginAttempt"]; 
int someValue = sessionLogicAttempt + 1; 
Session["LoginAttempt"] = someValue; 

此外,添加斷言檢查你假設值。

1

如果您以前沒有初始化它,它會在您第一次嘗試設置它時執行此操作。試試這個:

if (Session["LoginAttempt"] == null) 
    Session["LoginAttempt"] = 1; 
else 
    ((int)Session["LoginAttempt"]) += 1; 
0
//read 
object attemptObj = Session["LoginAttempt"] 
int attempt = 0; 
if (attemptObj != null) attempt = (int)attemptObj ; 

////write 
Session["LoginAttempt"] = attempt++; 
7

嘗試魔碼:

Session["LoginAttempt"] = ((int?)Session["LoginAttempt"] ?? 0) + 1; 

這將會話變量Session["LoginAttempt"]轉換爲可空int(一int,可以是null)的?? 0提供一個值如果它爲空則爲0,所以計算成功。

如果以前未初始化,則Session["LoginAttempt"]可以爲null。

0

請確保不要投射可能爲空值的東西。

int i = Session["val"] == null ? 0 : (int)Session["val"]; 

儘管如果某些其他程序員使用「val」會話並在其中放置了一個非int值,也可能會讓您感到困惑。

 int y = 0; 
     if (int.TryParse(Session["val"] == null ? string.Empty : Session["val"].ToString(), out y)) 
     { 
      // got your int value 
     } 
     else 
     { 
      // no int value in session val 
     } 
3

爲什麼不封裝LoginAttempt值作爲一個屬性,自動分配一個值:

protected int LoginAttempt 
{ 
    get 
    { 
     if (Session["LoginAttempt"] == null) 
     { 
      Session["LoginAttempt"] = 1; 
     } 
     return Convert.ToInt32(Session["LoginAttempt"].ToString()); 
    } 
    set 
    { 
     Session["LoginAttempt"] = value; 
    } 
} 

這樣函數的主體是更具可讀性:

if (LoginAttempt < 3) 
{ 
}