为什么httpessionstate没有实现字典
本文关键字:实现 字典 httpessionstate 为什么 | 更新日期: 2023-09-27 18:02:31
httpessionstate似乎是一个典型的键->值集合,那么为什么它不实现dictionary - interface呢?
背景:我正试图输出/保存我的ASP的上下文。. NET网站发生错误时,并希望使用递归函数执行此操作,该函数输出集合和所有包含集合的集合。因为HttpSessionState
只实现了ICollection
和IEnumerable
,如果我想以通用的方式(=与接口一起工作),我就会丢失关于键的信息。
IDictionary
表示目标集合能够按键快速查找。(据我所知)HttpSessionState
只是一个项目列表,而不是字典风格的结构。由于搜索该结构需要线性时间,所以没有理由将其视为字典。如果您需要大量快速查找,那么将键和值复制到真正的字典中。如果你不需要快速查找,那么你只需要为那个类专门化。
接口不仅仅是一个方法原型列表。接口也需要保留一些语义。对于任何IDictionary
的(大多数)消费者来说,按键快速查找是一种非显式的假设。
如何编写自己的字典实现包装器,在其构造函数中接受httpessionstate对象并按照您的意愿行事?我假设您希望这样做,以便您可以交换出其他类型的名称-值(字典-实现)会话实现。
当然,正如比利指出的,这是给一个表现不佳的伪字典穿上字典衣服的好方法!
像这样循环遍历会话密钥和引用值:
Session[key]