2012-07-26 20 views
2

我有一個對象MyObject,我將它存儲在會話中。用「as」投個對象仍然給出錯誤

我寫這篇文章:

MyObject TheObject = HttpContext.Current.Session["TheObjInSession"] as MyObject; 

我收到提示Object reference not set to an instance of an object爲什麼呢?我認爲如果你使用as進行強制轉換並且強制轉換會產生一個錯誤,那麼它只是返回null並且繼續執行。我應該如何重寫這一行?

感謝您的建議。

PS:產生的錯誤是因爲我刪除了啓用會話線[WebMethod(EnableSession = true)]我會放回線路,但我想確保在出現任何問題時沒有例外。

回答

4

機會是Session正在觸發它(它不存在或尚未建立)。如果您尚未標記班級來管理會話,這在處理程序中很常見。

是的,你是對的,as將嘗試進行演員陣營或導致null,但這只是假設你是左手對象是有效的,並且有一個值試圖施放。

解釋這多一點的深度:

HttpContext.Current.Session["Foo"] 
HttpContext       Probably fine 
HttpContext.Current     May not exist 
HttpContext.Current.Session   Most likely cause (no access to session) 

基本上使得引用關閉Session元素不可能的,如果Session本身不存在的關鍵。

+0

產生該錯誤是因爲我刪除了啓用會話行[WebMethod(EnableSession = true)]。當然,我會放回線路,但爲什麼運營商會拋出一個錯誤? – frenchie 2012-07-26 17:46:49

+0

@frenchie:如果你替換'WebMethodAttribute'並允許處理程序訪問,你應該沒問題。雖然我是一個堅定的信仰實踐的人,或者基本上「自己去嘗試一下」。此外,鑑於這是一個web服務,你應該罰款只是引用屬性'會議'而不是試圖訪問HttpContext的靜態成員。 – 2012-07-26 17:48:10

+0

我正在尋找使代碼安全,如果會話爲空或不工作。在這種情況下,有一段代碼「很好地」退出web服務。現在,如果劇組失敗,它只會引發異常。 – frenchie 2012-07-26 17:50:27

相關問題