((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中添加一个字符串。
答案 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);