2009-09-29 58 views
3

我創建枚舉屬性。這個屬性應該保存到會話中。我的代碼如下所示此錯誤上return Session["Mode"] as TPageMode如何將枚舉值保存到會話中

The as operator must be used with a reference type or nullable type

當我更換此行

public enum TPageMode { Edit=1,View=2,Custom=3}

 protected TPageMode Mode { 
      get{ 
       if (Session["Mode"] == null) 
        return TPageMode.Edit; 
       else 
       { 
        return Session["Mode"] as TPageMode; // This row is problem 
       }     
      } 
      set { 
       Session["Mode"] = value; 
      } 
     } 

編譯器版本錯誤

return Enum.Parse(typeof(TPageMode), Session["Mode"].ToString()); 

Cannot implicit convert type 'object' to 'TPageMode'

如何讀取會話中的枚舉值?

+0

不是社區維基... – 2009-09-29 09:10:06

回答

8

嘗試這種情況:

return (TPageMode) Session["Mode"]; 

作爲該錯誤消息表示,「如」不能與非空值類型被使用。 Enum.Parse 工作過(低效率),如果你願意再投向右類型:

return (TPageMode) Enum.Parse(Session["Mode"], typeof(TPageMode)); 
+0

哦謝謝。非常簡單:) – ebattulga 2009-09-29 09:00:52

1

代碼

return Session["Mode"] as TPageMode 

返回一個錯誤,因爲TPageMode是不是引用類型。

as運算符是C#中一種特殊的基於反射的類型轉換。它檢查操作員的左側是否可以轉換爲右側的類型。如果轉換爲而不是可能,則表達式返回null。由於TPageMode是一個枚舉,並且基於值類型,因此它不能包含空值。因此,在這個例子中,操作員不能使用。

要執行此類型的轉換,簡單地使用

return (TPageMode) Session["Mode"]; 

使用該語法,如果轉換是不可能的,一個InvalidCastException由運行時拋出。如果您確信在正常情況下始終可以進行轉換,請使用此語法。