如何将Session对象分配给C#中的本地对象.Net
我想如何分配会话变量,它是我定义的类的类型,这里是OrderData类。 我在'Session [“MyOrder”]上遇到错误;'如何将Session对象分配给C#中的本地对象.Net
我的代码片段如下所示。 也作为ord将对对象的引用,对对象的任何更改都会反映到会话对象?
OrderData ord = new OrderData();
if (Session["MyOrder"] == null)
{
Session.Add("MyOrder", ord);
}
else
{
ord = Session["MyOrder"];
}
你必须明确地将它转换为你的类型,如:
ord = Session["MyOrder"] as OrderData;
,然后检查null
。如果投射失败,as
可能会返回null
。
if(ord != null)
{
//valid value
}
您还可以使用:
ord = (OrderData) Session["MyOrder"];
但是,这可能会引发的情况下,异常的Session
持有不同的类型OrderData
为:
也为ORD将是对该对象的引用,任何对 对象的更改会被反映到会话对象?
由于`对象是一个类的实例,引用类型,它们将指向同一个实例。
考虑下面的例子:
OrderData ord1 = new OrderData() {ID = 2};
Session["MyOrder"] = ord1;
var ord2 = Session["MyOrder"] as OrderData;
ord2.ID = 1;
在代码执行结束既ord1
和ord2
将具有ID
如1
,因为两者的引用指向同一个对象。
如果你担心抛出异常,那么为什么不做以下安全检查 'if(!string.IsNullOrEmpty(Session [“MyOrder”] as string))? – MethodMan 2015-02-10 19:25:38
@MethodMan,'MyOrder'不是一个字符串,不需要将其转换为字符串,然后使用String.IsNullOrEmpty来检查。使用'as'将它转换为*特定类型*,然后检查'null'就足够了。 – Habib 2015-02-10 19:27:39
如果您在他的问题中查看“OP”第二行代码,我已经评论过它的内容,它是在您的答案的多个更新之前提到的。“OP”正在检查的是会话为空然后将对象添加到会话中 – MethodMan 2015-02-10 19:30:12
*对象的任何更改都会反映到会话对象?*是的,它会反映出来。两者都指向相同的参考。 – 2015-02-10 19:21:14