方法访问/设置C#.net中的会话对象

方法访问/设置C#.net中的会话对象,c#,.net,session,accessor,C#,.net,Session,Accessor,我目前拥有以下代码: public MyObject SessionStore { get { if (Session["MyData"] == null) Session["MyData"] = new MyObject(); return (MyData) Session["MyData"]; } set { Session["MyData"] = (MyObject)

我目前拥有以下代码:

public MyObject SessionStore
{
    get
    {
        if (Session["MyData"] == null)
            Session["MyData"] = new MyObject();

        return (MyData) Session["MyData"]; 
    }

    set 
    { 
        Session["MyData"] = (MyObject) value; 
    }
}
我使用会话存储访问它。属性I需要

我使用
SessionStore=SessionStore


这是有效的;但是,有没有更好的方法来完成同样的事情呢?

SessionStore很好,但最终可能会有很多属性。我倾向于将受保护的属性添加到基址并从那里访问

例如:

//
///获取或设置当前订单行
/// 
受保护的订单行CurrentOrderLine
{
得到
{
if(会话[“CurrentOrderLine”]==null)
{
会话[“CurrentOrderLine”]=新订单行(this.CurrentOrder);
}
将会话[“CurrentOrderLine”]作为订单行返回;
}
设置
{
会话[“CurrentOrderLine”]=值;
}
}

然后,如果您从中获得经验,它将作为属性显示在页面上。

您不需要在setter中强制转换,并且可以使getter更加简洁:

public MyData SessionStore
{
    get { return (MyData)(Session["MyData"]) ?? new MyData(); }
    set { Session["MyData"] = value; }
}

使用??这并不总是一个好主意。我使用了它一段时间,直到我将列表作为属性添加到会话中。然后,每当我调用属性来添加一个项目时,总会返回一个新的emtpy列表。如果你有这方面的工作,让我知道!“你不需要投二传”——雷夏普同意;)@幽灵纳:我喜欢把它用于像这样的简单案例。它就像“?”操作符,你不能过度使用它;)@马修-是的,我也是:)虽然我会提到它,以防有人用列表尝试它,并想知道为什么项目不会添加到它@WraithNath-听起来问题出在代码的其他地方,而不是??操作员本身。
public MyData SessionStore
{
    get { return (MyData)(Session["MyData"]) ?? new MyData(); }
    set { Session["MyData"] = value; }
}