Asp.net
為會話值的鍵名創建一個列舉是個好主意嗎?
而不是做
session("myvar1") = something session("myvar2") = something session("myvar3") = something session("myvar4") = something是在做
enum sessionVar myvar1 myvar2 myvar3 myvar4 end enum session(sessionVar.myvar1.tostring) = something session(sessionVar.myvar2.tostring) = something session(sessionVar.myvar3.tostring) = something session(sessionVar.myvar4.tostring) = something會更好?
我沒有使用會話密鑰的常量,而是使用我自己的類型安全會話對象,它看起來像這樣(抱歉,這是在 C# 中,請參閱下面的 VB 版本):
public class MySession { // Private constructor (use MySession.Current to access the current instance). private MySession() {} // Gets the current session. public static MySession Current { get { MySession session = HttpContext.Current.Session["__MySession__"] as MySession; if (session == null) { session = new MySession(); HttpContext.Current.Session["__MySession__"] = session; } return session; } } // My session data goes here: public string MyString { get; set; }; public bool MyFlag { get; set; }; public int MyNumber { get; set; }; }每當我需要從會話中讀取/寫入某些內容時,我可以像這樣使用我的類型安全會話對象:
string s = MySession.Current.MyString; s = "new value"; MySession.Current.MyString = s;該解決方案具有幾個優點:
- 我有一個類型安全的會話(不再有類型轉換)
- 我可以記錄所有基於會話的數據(通過評論 MySession 中的公共屬性)
- 向會話中添加新元素時,我不必搜尋解決方案來檢查是否已在其他地方使用相同的會話密鑰。
更新: 這是一個 VB 版本(從 C# 版本自動轉換)。對不起,但我不懂 VB,所以我不知道如何在 VB 中編寫屬性:
Public Class MySession ' Private constructor (use MySession.Current to access the current instance). Private Sub New() End Sub ' Gets the current session. Public Shared ReadOnly Property Current() As MySession Get Dim session As MySession = TryCast(HttpContext.Current.Session("__MySession__"), MySession) If session = Nothing Then session = New MySession() HttpContext.Current.Session("__MySession__") = session End If Return session End Get End Property ' My session data goes here: Public MyString As String Public MyFlag As Boolean Public MyNumber As Integer End Class