0

我有一个将值分配给在 c# 中创建的字典的函数。在函数中进行一些计算之后,字典由一个值和一个键组成。我需要创建一个会话,在这个会话中保存这个字典。有人可以帮忙吗?

4

1 回答 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 回答