我有一个将值分配给在 c# 中创建的字典的函数。在函数中进行一些计算之后,字典由一个值和一个键组成。我需要创建一个会话,在这个会话中保存这个字典。有人可以帮忙吗?
问问题
8940 次
1 回答
3
简单地说,如果你有一个Dictionary<string, List<int>>
然后把它放在会话中并不是很复杂;
Dictionary<string, List<int>> myDict = new Dictionary<string, List<int>>();
HttpContext.Current.Session.Add("MyDictionary", myDict);
如果您想检查 Session 是否已经包含您的字典,如果没有,则仅添加它:
if(!HttpContext.Current.Session.ContainsKey("MyDictionary"))
{
HttpContext.Current.Session.Add("MyDictionary", myDict);
}
要取出它,请记住它不是类型的,Session
实际上是字符串字典,对象所以你必须强制转换:
if(HttpContext.Current.Session.ContainsKey("MyDictionary"))
{
Dictionary<string, List<int>> myDict = HttpContext.Current.Session["MyDictionary"] as Dictionary<string, List<int>>;
}
但是,您还应该考虑该对象的生命周期 - 会话不稳定,因为它具有有限的生命周期 - 例如,它会在预定的不活动时间后消失,所以如果你希望它徘徊更长的时间,那么您可能需要考虑替代策略。
MSDN上有大量关于 Session over 的文档,这也是 Stack Overflow 上非常常见的话题。
还请记住,由于 Session 实际上是Dictionary<String, Object>
由 .Net Framework 和 IIS 管理的,因此您还可以执行以下操作:
Session["MyValues"] = new List<Int32>();
当然,在检索时:
List<Int32> myValues = Session["MyValues"] as List<Int32>();
其他替代方案包括缓存;如果您的对象将可供应用程序的所有用户使用,那么这可能是一个更好的解决方案。请参阅此答案以获取更多信息。
我也投票结束您的问题,因为我认为它过于本地化,但我希望我的回答能帮助您。
于 2012-09-11T08:24:21.143 回答