Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么HttpSessionState不实现IDictionary?_C#_.net_Asp.net_Session_Dictionary - Fatal编程技术网

C# 为什么HttpSessionState不实现IDictionary?

C# 为什么HttpSessionState不实现IDictionary?,c#,.net,asp.net,session,dictionary,C#,.net,Asp.net,Session,Dictionary,似乎是一个典型的键->值集合,那么为什么它不实现-接口呢 背景:当发生错误时,我试图输出/保存ASP.NET网站的上下文,并希望使用递归函数执行此操作,该函数输出集合和所有包含集合的集合。由于HttpSessionState仅实现ICollection和IEnumerable,如果我想以通用方式(=使用接口)实现,我将丢失有关键的信息。只需循环使用和引用值,如下所示: Session[key] IDictionary意味着目标集合能够通过键进行快速查找。(据我所知)HttpSessionSta

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

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

只需循环使用和引用值,如下所示:

Session[key]

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


对于一个接口来说,不仅仅是一系列的方法原型,还有更多的东西。接口也需要保留一些语义。对于任何
IDictionary

的(大多数)使用者来说,按键快速查找就是这样一种非显式的假设。编写自己的IDictionary实现包装器,在其构造函数中接受HttpSessionState对象,并按您所需的行为如何?我假设您希望这样做,以便可以交换其他类型的名称值(IDictionary实现)会话实现


当然,正如比利所指出的,这是一个很好的方式,让一本性能差的psuedo字典穿上字典的衣服

嘿,谢谢你的回答。但这并没有回答我的问题。我仍然无法为输出编写通用函数,这也适用于其他案例/集合。我必须转换到HttpSessionState才能使其工作,但它仍然不能解释.NET团队为什么选择不在这里使用该接口。我很好奇