sessionCodeProject的这篇文章确实对我有所启迪, 
  http://www.codeproject.com/useritems/SessionWrapper.asp#xx1208856xx。 
   
  诚如作者所说,我们经常在ASP.NET用许多类似于下面的代码来检测Session中存储的对象,来防止Session过期后存储的变量丢失问题: 
  Int32 nUserID = -1; 
  if ( null != Session["userID"] ) { 
   if ( Session["userID"] is Int32 ) { 
   if ( 0 < Session["userID"] ) { 
   nUserID = (Int32) Session["userID"] 
   } 
   } 
  } 
  if ( -1 == nUserID ) 
  { 
   throw new ApplicationException ( "Unexpected situation: userID invalid." ); 
  } 
   
  this.doSomething( nUserID ); 
  这样的代码会遍布各处。 
   
  那么,利用他的这个封装方案来做重构,确实让代码简洁干净了不少! 
  经过他的封装,上面的代码用这么一句话就行了: 
   
  this.doSomething( CCurrentSession.UserID ) 
   
  他的类其实也很简单,如下所示: 
   
   
  using System; 
  using System.Web; 
   
  /**////-------------------------------------------------------------------- 
  /// Developed by M. van Eijkel - aug 2005 
  /// [e]: marcelvaneijkelgmail.com 
  /// [w]: www.vaneijkel.com 
   
  namespace VanEijkel.Web 
  { 
   /**//// <summary> 
   /// Wrapper class for the session object. 
   /// It centralizes the logic for retrieving and validation of session information. 
   /// By using an approach like this you improve the protection and encapsulation of existing code. 
   /// It offers a simple, low-risk, easy manageable way to improve existing WebApplication. 
   /// Therfore, I call it webRefactoring. 
   /// </summary> 
   public class CurrentSession 
   { 
   Constants#region Constants 
   private const String sMANDATORY_SESSION_KEY_NOT_FOUND_MSG = "Session variable excepted but does not exist. Key={0}"; 
   private const String sMANDATORY_SESSION_VALUE_INVALID_NULL = "None null session value excepted. Key={0}"; 
   
   private const Int32 nUSERID_UNKOWN = -1; 
   private const Int32 nUSERID_MINIMUM = 1; 
   private const String sUSERID_INVALID = "Invalid UserID:{0}. UserID should be larger than:{1}"; 
   #endregion 
   
   UserID#region UserID 
   /**//// <summary> 
   /// Returns the userID as a Int32 instead of an object. 
   /// This way you will get the compiler protection and intelligence support you need. 
   /// </summary> 
   public static Int32 UserID 
   { 
   get 
   { 
   return (Int32) GetValueOrDefault( eKeys.UserID, nUSERID_UNKOWN ); 
   } 
   set 
   { 
   if ( nUSERID_MINIMUM >= value ) 
   { 
   throw new ApplicationException ( String.Format(sUSERID_INVALID, value, nUSERID_MINIMUM )); 
   } 
   SetValue( eKeys.UserID, value ); 
   } 
   } 
   #endregion 
   
   private: GetValueOrDefault( eKeys eKey, Object oDefaultValue )#region private: GetValueOrDefault( eKeys eKey, Object oDefaultValue ) 
   /**//// <summary> 
   /// Gets the value from the session object. 
   /// </summary> 
   /// <param name="eKey"> The session key to get the value for.</param> 
   /// <param name="oDefaultValue">The default value to use if no valid value stored.</param> 
   /// <returns>When the value is null or the key does not exist, 
   /// the specified default value is returned. 
   /// Otherwise, the value is returned</returns> 
   private static object GetValueOrDefault( eKeys eKey, Object oDefaultValue ) 
   { 
   //get the value 
   object oValue = GetValue( eKey ); 
   
   //value not found or null? 
   if (null == oValue) 
   { 
   //return default value 
   return oDefaultValue; 
   } 
   
   //everything oke: return session value 
   return oValue; 
   } 
   #endregion 
   private: GetMandatoryValue( eKeys eKey )#region private: GetMandatoryValue( eKeys eKey ) 
   /**//// <summary> 
   /// Returns the session value for a session-key that must exist. 
   /// If the key does not exist an applicationException is thrown. 
   /// </summary> 
   /// <param name="eKey"> The session-key to return the session-value for. </param> 
   /// <returns> A none-null value.</returns> 
   private static object GetMandatoryValue( eKeys eKey ) 
   { 
   //get the value 
   object oValue = GetValue( eKey ); 
   
   //key not found or value null? 
   if ( null == oValue ) 
   { 
   //throw applicationException because its application logic error (none CLR) 
   throw new ApplicationException ( String.Format( sMANDATORY_SESSION_KEY_NOT_FOUND_MSG, eKey.ToString() )); 
   } 
   
   //everything oke: return value 
   return oValue; 
   } 
   #endregion 
   private: GetValue( eKeys eKey )#region private: GetValue( eKeys eKey ) 
   /**//// <summary> 
   /// Gets the session value from the specified key. 
   /// </summary> 
   /// <param name="eKey">The key to get the value from</param> 
   /// <returns>The session value for the specified session key. 
   /// If the key does not exist, null is returned. 
   /// </returns> 
   private static object GetValue( eKeys eKey ) 
   { 
   return HttpContext.Current.Items[ eKey.ToString() ]; 
   } 
   #endregion 
   
   private SetMandatoryValue( eKeys eKey, Object oValue )#region private SetMandatoryValue( eKeys eKey, Object oValue ) 
   private static void SetMandatoryValue( eKeys eKey, Object oValue ) 
   { 
   if ( null == oValue ) 
   { 
   throw new ApplicationException( String.Format(sMANDATORY_SESSION_VALUE_INVALID_NULL, eKey.ToString() ) ); 
   } 
   } 
   #endregion 
   private SetValue( eKeys eKey, Object oValue)#region private SetValue( eKeys eKey, Object oValue) 
   /**//// <summary> 
   /// Stores the specified session-value to the specified session-key. 
   /// </summary> 
   /// <param name="eKey">The key for the value to store in the session.</param> 
   /// <param name="oValue">The value to store in the session</param> 
   private static void SetValue ( eKeys eKey, Object oValue) 
   { 
   HttpContext.Current.Items[eKey.ToString()] = oValue; 
   } 
   #endregion 
   
   /**//// <summary> 
   /// An enum for the 
   /// </summary> 
   private enum eKeys 
   { 
   UserID 
   } 
   } 
  }			
重构Session确实让代码简洁干净了不少
                    80酷酷网    80kuku.com 
       
  
 
 
  
