2013-04-18 49 views
0

此錯誤不斷彈出,我似乎無法弄清楚它來自哪裏。對象引用未設置爲對象的實例(int)

if (!IsPostBack) 
{ 
    DataTable LocalCart = new DataTable(); 
    LocalCart = (DataTable)Session["cart"]; 
    int LocalCartItemCount = (int) Session["CartItemCount"]; 
    Decimal LocalCartAmount = (Decimal)Session["CartAmount"]; 

    if (LocalCart.Rows.Count == 0) 
    { 
     titleLabel.Text = "Your shopping cart is empty!"; 
     GridCart.Visible = false; 
     updateButton.Enabled = false; 
     checkoutButton.Enabled = false; 
     totalAmountLabel.Text = String.Format("{0:c}", 0); 
    } 
    else 
    { 
     GridCart.DataSource = LocalCart; 
     GridCart.DataBind(); 
     titleLabel.Text = "These are the products in your shopping cart:"; 
     GridCart.Visible = true; 
     updateButton.Enabled = true; 
     checkoutButton.Enabled = true; 
     totalAmountLabel.Text = String.Format("{0:c}", LocalCartAmount); 
    } 

它的說法錯誤的是在這裏 - >int LocalCartItemCount = (int) Session["CartItemCount"];

回答

1

你不檢查,看是否存在會話密鑰"CartItemCount"。如果它不存在,那麼Session["CartItemCount"]的結果將返回null,並在嘗試將null轉換爲(int)時創建該錯誤。

1

如果會話對象不存在,它將返回null將打破強制轉換。你應該看看使用int.tryparse。如果成功,它將更新整數,否則它不會被彈出。

試試下面的代碼

int LocalCartItemCount; 
int.TryParse(Session["CartItemCount"].ToString(), out LocalCartItemCount); 

B計劃

int LocalCartItemCount = (int)(Session["CartItemCount"] ?? 0); 
+0

如果Session [「CartItemCount」]爲空,這會給你一個對象引用錯誤。 – valverij

+0

現在同樣的錯誤 - > int.TryParse(Session [「CartItemCount」]。ToString(),out LocalCartItemCount); –

+0

好吧,讓我們一起去看看我的編輯。 – Smeegs

1

好,第一個問題是,Session["CartItemCount"]是最有可能無效。由於您試圖在演員中使用此空值,因此您正在接收對象引用錯誤。

這可能與C#的??運營商進行修正:

int LocalCartItemCount = (int)(Session["CartItemCount"] ?? 0); 

這條線,基本上是這樣的簡寫:

int LocalCartItemCount; 
if(Session["CartItemCount"] != null) 
    LocalCartItemCount = Session["CartItemCount"]; 
else 
    LocalCartItemCount = 0; 

這應該工作,只要Session["CartItemCount"]始終是一個整數。如果它不是一個整數,但是,您可能會收到以下錯誤之一:

  • Specified cast is not valid
  • Cannot unbox 'Session["CartItemCount"]' as 'int'

如果有以上這些錯誤的風險,那麼你可能要它擴展到這樣的事情:

int LocalCartItemCount = 0; 
if (Session["CartItemCount"] != null) 
{ 
    Int32.TryParse(Session["CartItemCount"].ToString(), out LocalCartItemCount); 
} 

通常情況下,雖然,我不喜歡使用TryParse布爾表達式之外,但它仍然可以。

請記住,您需要對來自會話的任何對象進行類似的空檢查。因此,對於在評論中提到的LocalCart.Rows.Count == 0檢查,例如,我會改變if閱讀:

if(LocalCart != null && LocalCart.Rows.Count == 0) 
{ 
    // do stuff here 
} 

或者,你可以使用??操作如上所述。

+0

謝謝。我已經嘗試過了,它適用於CartItemCount。它沒有爲CartAmount工作,所以我試着你的第二個解決方案,它的工作。但現在我有另一個問題,但同樣的錯誤,這一次 - >如果(LocalCart.Rows.Count == 0) 代碼: - –

+0

@ArshadÃršhâdJugon如果'Session [「cart」]'爲空,它將重置你的LocalCart DataTable爲null。在這種情況下,使你的if如下:'if(LocalCart!= null && LocalCart.Rows.Count == 0)'或者,你可以試試這個:'(DataTable)(Session [「cart」] ?? new DataTable ()' – valverij

相關問題