如何将枚举值保存到会话中

时间:2009-09-29 08:55:20

标签: c# asp.net session enums

我正在创建枚举属性。此属性应保存到会话中。我的代码在这里

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 Session["Mode"] as TPageMode

上的编译器发布错误

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

当我将此行替换为

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

显示此错误

Cannot implicit convert type 'object' to 'TPageMode'

如何从会话中读取枚举值?

2 个答案:

答案 0 :(得分:9)

试试这个:

return (TPageMode) Session["Mode"];

如错误消息所示,“as”不能与非可空值类型一起使用。如果你然后转换为正确的类型,Enum.Parse 工作(效率低下):

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

答案 1 :(得分:1)

代码

return Session["Mode"] as TPageMode

返回错误,因为TPageMode不是引用类型。

as运算符是C#中一种特殊的基于反射的类型转换。它检查操作员的左侧是否可以转换为右侧的类型。如果转换可能,则表达式返回null。由于TPageMode是枚举并且基于值类型,因此它不能保持值null。因此,在此示例中不能使用运算符。

要执行此类型转换,只需使用

即可
return (TPageMode) Session["Mode"];

使用此语法,如果无法进行转换,运行时将抛出InvalidCastException。如果您确信在正常情况下始终可以进行转换,请使用此语法。