我正在创建枚举属性。此属性应保存到会话中。我的代码在这里
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'
如何从会话中读取枚举值?
答案 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
。如果您确信在正常情况下始终可以进行转换,请使用此语法。