HttpSessionState似乎是一个典型的关键字 - >值集合,为什么它没有实现IDictionary - 接口?
背景:我正在尝试在发生错误时输出/保存我的ASP.NET网站的上下文,并希望使用递归函数执行此操作,该函数输出Collection并包含所有包含集合。由于HttpSessionState
仅实现ICollection
和IEnumerable
,因此如果我想以通用方式(=使用接口)执行此操作,我将丢失有关密钥的信息。
答案 0 :(得分:7)
IDictionary
表示目标集合能够按键快速查找。 (据我所知)HttpSessionState
只是一个项目列表,而不是字典样式结构。由于搜索该结构需要线性时间,因此没有理由将其视为字典。如果您需要大量快速查找,请将键和值复制到真正的字典中。如果您不需要快速查找,那么您只需要专门研究该类。
界面有很多东西,而不仅仅是方法原型列表。还需要为接口保留语义。按密钥快速查找是任何IDictionary
的(大多数)消费者的非显式假设。
答案 1 :(得分:2)
如何编写自己的IDictionary实现包装器,在其构造函数中获取HttpSessionState对象并按您的需要运行?我假设您想要这样做,以便您可以换掉其他类型的名称 - 值(IDictionary-实现)会话实现。
当然,正如比利指出的那样,这是一个很好的方式来穿着字典衣服中表现不佳的假字典!
答案 2 :(得分:-1)
只需遍历Session Keys和参考值,如下所示:
Session[key]