2011-07-18 42 views
6

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

背景:我想输出/保存我的ASP.NET网站的上下文,当发生错误,并希望用递归函数,输出一个集合和所有包含集合这样做。由于HttpSessionState只实现了ICollectionIEnumerable,如果我想以通用方式(=使用接口)执行操作,我将丢失有关密钥的信息。

回答

7

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

接口有更多的东西,而不仅仅是方法原型列表。还有一些语义需要为接口保留。按键快速查找是任何IDictionary(大多数)消费者的非明确假设。

-1

通过像这样的Session Keys和参考值只是循环:

Session[key] 
+0

嘿,谢谢你的回答。但它并不回答我的问题。我仍然无法为输出写一个通用函数,它也适用于其他案例/集合。我将不得不投入HttpSessionState来完成这项工作。 – magnattic

+0

但它仍不能解释为什么.NET团队选择不使用此处的界面。我很好奇。 ;) – magnattic

2

如何编写自己的IDictionary实现包装器,该包装器在其构造器中接受HttpSessionState对象并按您的需要运行?我假设你想这样做,所以你可以换出其他种类的名称值(IDictionary实现)会话实现。

当然,正如比利指出的那样,这是穿上字典服装中表现不佳的虚拟字典的好方法!

相关问题