2011-07-18 11 views
6

HttpSessionState parece ser una colección típica de clave -> valor, entonces ¿por qué no implementa el IDictionary - Interfaz?¿Por qué HttpSessionState no implementa IDictionary?

Antecedentes: Estoy tratando de generar/guardar el contexto de mi sitio web ASP.NET cuando ocurre un error y quería hacer esto con una función recursiva, que genera una colección y todas las colecciones. Como HttpSessionState solo implementa ICollection y IEnumerable, estoy perdiendo la información sobre las claves si quiero hacerlo de forma genérica (= trabajando con interfaces).

Respuesta

7

IDictionary implica que la colección de destino es capaz de operaciones de búsqueda rápida por clave. (Hasta donde yo sé) HttpSessionState es solo una lista de elementos, no una estructura de estilo de diccionario. Como la búsqueda de esa estructura tomaría tiempo lineal, no hay razón para tratarlo como un diccionario. Si necesita muchas búsquedas rápidas, copie las claves y los valores en un diccionario verdadero. Si no necesitas búsquedas rápidas, entonces necesitarás especializarte para esa clase.

La interfaz tiene más elementos que solo una lista de prototipos de métodos. Hay una semántica que también se debe preservar para una interfaz. Las búsquedas rápidas por clave son una suposición no explícita para la mayoría de los consumidores de cualquier IDictionary.

-1

Sólo bucle a través de los Session Keys y de referencia valores, así:

Session[key] 
+0

Hola, gracias por la respuesta. Sin embargo, no responde mi pregunta. Todavía no pude escribir una función general para la salida, que también funciona para otros casos/colecciones. Tendría que enviar a HttpSessionState para que esto funcione. – magnattic

+0

Y todavía no explica por qué el equipo de .NET eligió no usar la interfaz aquí. Soy curioso. ;) – magnattic

2

¿Qué le parece escribir su propia envoltura de implementación de IDictionary que toma un objeto HttpSessionState en su constructor y se comporta como lo desea? Supongo que quiere hacer esto para poder intercambiar otros tipos de implementaciones de sesión de nombre-valor (implementación de IDictionary).

¡Por supuesto, como señala Billy, esta es una gran manera de vestir un diccionario de pseudongo de bajo rendimiento en ropa de diccionario!

Cuestiones relacionadas