2012-08-01 52 views
0

我的代碼有什麼問題?我最近發佈了一個問題關於Calculation in code behind,我試圖Vinoth的答案,但它給了我一個錯誤在這行:未將對象引用設置爲對象錯誤消息的實例

bool isChaffeurUsed = (bool)Session["IsChaffeurUsed"]; 

錯誤消息是:對象引用不設置到對象的實例。

請告訴我該怎麼做。非常感謝,祝你有美好的一天。

+1

所有答案都是正確的,但你也應該檢查該值是一個布爾http://msdn.microsoft .com/en-us/library/system.boolean.tryparse.aspx – 2012-08-01 13:53:23

回答

3

你需要首先檢查對象,嘗試:

var isChaffeurUsed = false; 

if (Session["IsChaffeurUsed"] != null) 
{ 
    isChaffeurUsed = bool.Parse(Session["isChaffeurUsed"].ToString()); 
} 
4
Session["IsChaffeurUsed"] 

沒有定義 - 你沒有設置任何會話變量與關鍵IsChaffeurUsed

你需要檢查它是否首先設置,

bool isChaffeurUsed; 

if(Session["IsChaffeurUsed"] != null) 
    isChaffeurUsed = (bool)Session["IsChaffeurUsed"]; 
3

錯誤是試圖告訴你,Session["IsChaffeurUsed"]不存在。

如果你知道一個默認值,你可以改變的語句爲:

bool isChaffeurUsed = (bool)(Session["IsChaffeurUsed"] ?? false) 

或者,如果你想允許空值(這表示該值沒有專門設置爲任意值),你可以使用可空類型:

bool? isChaffeurUsed = (bool?)Session["IsChaffeurUsed"]; 
1

最有可能的,你沒有在任何Session的名稱"IsChaffeurUsed"

1

如果Session爲空或者在Session中未找到IsChaffeurUsed,您將得到該異常。會話可能不是空的,所以問題很可能是IsChaffeurUsed找不到。

如果未設置IsChaffeurUsed,則需要決定如何處理。例如,你可以認爲它是假的:

bool isChaffeurUsed = Session["IsChaffeurUsed"] == null ? false 
    : (bool)Session["IsChaffeurUsed"]; 
0

的TryParse()方法,因爲這個原因存在:

地看着會話變量
bool.TryParse(Session["IsChaffeurUsed"], out isChaffeurUsed) 
+0

如果是字符串,則使用TryParse。這聽起來像他期待它是一個布爾值。 Session [X]返回一個他正在轉換爲布爾值的對象。在這種情況下沒有理由進行字符串解析。 – 2012-08-01 15:11:14

+0

你認爲推斷/假定類型是安全的嗎?如果這不是bool類型,試圖將它轉換爲這樣會產生未處理的異常。 – 2012-08-01 15:14:53

+0

我通常會有一段代碼讀取/寫入會話中的值,通常是一個帶有getter和setter的屬性。在這種情況下,我認爲它是安全的。如果有人在會話中使用相同的密鑰輸入不正確的值,那麼我希望它引發異常。 如果我確實想要更寬容這種類型,那麼我會使用Convert.ToBoolean而不是bool.TryParse。 – 2012-08-02 14:15:18

0

的一件事是,有一種可能性,變量將後消失最初的閱讀(這在我身上發生過幾次)。這通常是在ASP應用望着會話/緩存變量打交道時,我使用模式:下面

object o = null; 
if((o = Session["IsChaffeurUsed"]) != null) 
{ 
    // Do something with o: bool.Parse, (bool), etc... 
} 
相關問題