如何处理((List <string>)Session.Add(“”)</string>

时间:2010-08-14 13:33:09

标签: c# asp.net arrays string session

((List<string>)Session["answera"]).Add(xle.InnerText); 

我需要执行此操作,但我得到“对象引用未设置为......的实例” 我不想用

 List<string> ast = new List<string>();
    ast.Add("asdas!");
    Session["stringList"] = ast;
    List<string> bst = (List<string>)Session["stringList"];

因为我只想在Session-String-Array中添加一个字符串。

4 个答案:

答案 0 :(得分:4)

您是否考虑将List<string>包装在自定义上下文对象的属性中?我必须在应用程序上做类似的事情,所以我最终为我创建了一个UserContext对象,它有一个Current属性,负责创建新对象并将它们存储在会话。这是基本代码,经过调整以列出您的列表:

public class UserContext
{
    private UserContext()
    {
    }

    public static UserContext Current
    {
        get
        {
            if (HttpContext.Current.Session["UserContext"] == null)
            {
                var uc = new UserContext
                             {
                                 StringList = new List<string>()
                             };

                HttpContext.Current.Session["UserContext"] = uc;
            }

            return (UserContext) HttpContext.Current.Session["UserContext"];
        }
    }

    public List<string> StringList { get; set; }

}

我实际上从this SO question得到了大部分代码和结构。

因为这个类是我的Web命名空间的一部分,所以我访问它就像访问HttpContext.Current对象一样,所以我永远不必显式地转换它。

答案 1 :(得分:3)

如果你得到一个空引用异常,那是因为会话不像你想象的那样包含列表,或者“xle”为null。您认为会话已包含您的列表是否有任何理由?

答案 2 :(得分:1)

定义这样的属性,并使用该属性而不是访问Session对象

public List<string> StringList
{
     get
        {
           if (Session["StringList"] == null)
                   Session["StringList"] = new List<string>();

            return Session["StringList"] as List<string>;
         }
}

你的应用中的任何地方你都可以:

StringList.Add("test");

答案 3 :(得分:0)

您可以使用

((List<string>)Session["answera"]).Add(xle.InnerText);

但您必须确保Session["answera"]不是null

或者尝试这种方式:

string[] stringArray = {"asdas"};
List<string> stringList = new List<string>(stringArray);