为什么HttpSessionState没有实现IDictionary?

时间:2011-07-18 16:19:57

标签: c# .net asp.net session dictionary

HttpSessionState似乎是一个典型的关键字 - >值集合,为什么它没有实现IDictionary - 接口?

背景:我正在尝试在发生错误时输出/保存我的ASP.NET网站的上下文,并希望使用递归函数执行此操作,该函数输出Collection并包含所有包含集合。由于HttpSessionState仅实现ICollectionIEnumerable,因此如果我想以通用方式(=使用接口)执行此操作,我将丢失有关密钥的信息。

3 个答案:

答案 0 :(得分:7)

IDictionary表示目标集合能够按键快速查找。 (据我所知)HttpSessionState只是一个项目列表,而不是字典样式结构。由于搜索该结构需要线性时间,因此没有理由将其视为字典。如果您需要大量快速查找,请将键和值复制到真正的字典中。如果您不需要快速查找,那么您只需要专门研究该类。

界面有很多东西,而不仅仅是方法原型列表。还需要为接口保留语义。按密钥快速查找是任何IDictionary的(大多数)消费者的非显式假设。

答案 1 :(得分:2)

如何编写自己的IDictionary实现包装器,在其构造函数中获取HttpSessionState对象并按您的需要运行?我假设您想要这样做,以便您可以换掉其他类型的名称 - 值(IDictionary-实现)会话实现。

当然,正如比利指出的那样,这是一个很好的方式来穿着字典衣服中表现不佳的假字典!

答案 2 :(得分:-1)

只需遍历Session Keys和参考值,如下所示:

Session[key]