我的代碼有什麼問題?我最近發佈了一個問題關於Calculation in code behind,我試圖Vinoth的答案,但它給了我一個錯誤在這行:未將對象引用設置爲對象錯誤消息的實例
bool isChaffeurUsed = (bool)Session["IsChaffeurUsed"];
錯誤消息是:對象引用不設置到對象的實例。
請告訴我該怎麼做。非常感謝,祝你有美好的一天。
我的代碼有什麼問題?我最近發佈了一個問題關於Calculation in code behind,我試圖Vinoth的答案,但它給了我一個錯誤在這行:未將對象引用設置爲對象錯誤消息的實例
bool isChaffeurUsed = (bool)Session["IsChaffeurUsed"];
錯誤消息是:對象引用不設置到對象的實例。
請告訴我該怎麼做。非常感謝,祝你有美好的一天。
你需要首先檢查對象,嘗試:
var isChaffeurUsed = false;
if (Session["IsChaffeurUsed"] != null)
{
isChaffeurUsed = bool.Parse(Session["isChaffeurUsed"].ToString());
}
Session["IsChaffeurUsed"]
沒有定義 - 你沒有設置任何會話變量與關鍵IsChaffeurUsed
你需要檢查它是否首先設置,
bool isChaffeurUsed;
if(Session["IsChaffeurUsed"] != null)
isChaffeurUsed = (bool)Session["IsChaffeurUsed"];
錯誤是試圖告訴你,Session["IsChaffeurUsed"]
不存在。
如果你知道一個默認值,你可以改變的語句爲:
bool isChaffeurUsed = (bool)(Session["IsChaffeurUsed"] ?? false)
或者,如果你想允許空值(這表示該值沒有專門設置爲任意值),你可以使用可空類型:
bool? isChaffeurUsed = (bool?)Session["IsChaffeurUsed"];
最有可能的,你沒有在任何Session
的名稱"IsChaffeurUsed"
。
如果Session爲空或者在Session中未找到IsChaffeurUsed,您將得到該異常。會話可能不是空的,所以問題很可能是IsChaffeurUsed找不到。
如果未設置IsChaffeurUsed,則需要決定如何處理。例如,你可以認爲它是假的:
bool isChaffeurUsed = Session["IsChaffeurUsed"] == null ? false
: (bool)Session["IsChaffeurUsed"];
的TryParse()方法,因爲這個原因存在:
地看着會話變量bool.TryParse(Session["IsChaffeurUsed"], out isChaffeurUsed)
如果是字符串,則使用TryParse。這聽起來像他期待它是一個布爾值。 Session [X]返回一個他正在轉換爲布爾值的對象。在這種情況下沒有理由進行字符串解析。 – 2012-08-01 15:11:14
你認爲推斷/假定類型是安全的嗎?如果這不是bool類型,試圖將它轉換爲這樣會產生未處理的異常。 – 2012-08-01 15:14:53
我通常會有一段代碼讀取/寫入會話中的值,通常是一個帶有getter和setter的屬性。在這種情況下,我認爲它是安全的。如果有人在會話中使用相同的密鑰輸入不正確的值,那麼我希望它引發異常。 如果我確實想要更寬容這種類型,那麼我會使用Convert.ToBoolean而不是bool.TryParse。 – 2012-08-02 14:15:18
的一件事是,有一種可能性,變量將後消失最初的閱讀(這在我身上發生過幾次)。這通常是在ASP應用望着會話/緩存變量打交道時,我使用模式:下面
object o = null;
if((o = Session["IsChaffeurUsed"]) != null)
{
// Do something with o: bool.Parse, (bool), etc...
}
所有答案都是正確的,但你也應該檢查該值是一個布爾http://msdn.microsoft .com/en-us/library/system.boolean.tryparse.aspx – 2012-08-01 13:53:23