繁体   English   中英

在会话中将项目添加到通用列表

[英]Adding Item to Generic List in Session

我有一个会话助手,因此我的会话变量是强类型的:

public sealed class SessionHelper
{
    private static HttpSessionState Session
    {
        get
        {
            return HttpContext.Current.Session;
        }
    }

    public static List<TestObject> Tests
    {
        get
        {
            List<TestObject> objects = new List<TestObject>();
            if (Session["Tests"] != null)
            {
                objects = (List<TestObject>)Session["Tests"];
            }

            return objects;
        }

        set
        {
            Session["Tests"] = value;
        }
    }
}

现在,我试图将一个项目添加到TestObjects List所以我认为我可以这样做:

SessionHelper.Tests.Add(new TestObject("Test name", 1));

但是,当我单步执行代码并在运行上述行之后查看SessionHelper.Tests ,列表计数仍为0。

如果我做:

List<TestObject> tests = SessionHelper.Tests;
tests.Add(new TestObject(testName, version));
SessionHelper.Tests = tests;

然后它可以正常工作。

为什么不能将测试对象直接添加到SessionHelper

Session["Tests"]为null。 因此, SessionHelper.Tests返回一个新的空列表。 但是,此新列表尚未在会话对象中。 因此, SessionHelper.Tests每次都会返回一个新的空列表。 创建新列表后,将其存储在会话对象中。

public static List<TestObject> Tests
{
    get
    {
        List<TestObject> objects = (List<TestObject>)Session["Tests"];
        if (objects == null)
        {
            objects = new List<TestObject>();
            Session["Tests"] = objects; // Store the new list in the session object!
        }
        return objects;
    }

    set // Do you still need this setter?
    {
        Session["Tests"] = value;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM