首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# Session 值轉字串避坑指南:ToString、Cast 與 Convert.ToString 差異深度解析

     編輯:關於C語言

Session 三種儲存模式速查

在深入轉換技巧前,先釐清 web.config 中 <sessionState> 的三種模式:

模式特點適用場景
InProc (預設)進程內記憶體,速度最快單伺服器、小型應用
StateServer獨立進程 (aspnet_state.exe),支援多伺服器共享Web Farm、需 Session 持久化
SQLServer資料庫儲存,最慢但最可靠,支援叢集高可用性、資料永久保存需求
<!-- InProc 範例 -->
<sessionState mode="InProc" cookieless="false" timeout="20" />

<!-- StateServer 範例 -->
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42626" cookieless="false" timeout="20" />

<!-- SQLServer 範例 -->
<sessionState mode="SQLServer" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="20" />

核心議題:Session["Key"] 轉 String 的三種寫法大比拚

在實務中判斷「是否有值」時,null、"" (Empty) 與 DBNull.Value 的處理差異極大,錯誤寫法極易拋出 NullReferenceException。

行為差異對照表

Session["a"] 實際值.ToString()(string) CastConvert.ToString()
null❌ 拋出 NullReferenceException回傳 null回傳 "" (Empty)
""回傳 ""回傳 ""回傳 ""
"hello"回傳 "hello"回傳 "hello"回傳 "hello"

安全判斷寫法推薦

❌ 危險寫法

// 若 Session["a"] 為 null 直接炸
if (Session["a"].ToString() != "") { ... }

✅ 寫法一:短路邏輯 + .ToString() (須嚴格順序)

✅ 寫法二:Cast (string) - 顺序不敏感

✅ 寫法三:Convert.ToString() - 最簡潔、最推薦

最佳實踐總結

  1. 優先使用 Convert.ToString():語意清晰、不拋例外、自動處理 null/DBNull/Empty。
  2. 需區分 null 與 Empty 時:改用 (string)Session["key"] 搭配 == null / == "" 判斷。
  3. 避免直接呼叫 .ToString():除非已確定不為 null (如剛經過 != null 判斷)。
  4. 封裝擴充方法:public static string GetSafeString(this HttpSessionState s, string key) => Convert.ToString(s[key]); 專案通用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved