2012-04-04 27 views
20

Puede alguien por favor me explique la diferencia entre:¿Cuál es la diferencia entre Session.Add ("clave", valor) y Session ["key"] = value?

Session.Add("name",txtName.text); y Session["name"] = txtName.text;

Era una pregunta de la entrevista y me contestó que ambos almacenar datos en formato como key = "Value"Dictionary clase en C#.

¿Estoy en lo cierto o hay alguna diferencia?

+2

Estoy seguro de que hay una buena documentación msdn con respecto a esto. Quizás podría investigarlo usted mismo y estar mejor preparado para la próxima entrevista. – jpm

+13

Esa es una pregunta de entrevista * terrible *. –

+2

@EricLippert, estoy completamente de acuerdo. El proceso de contratación de un desarrollador está muy roto en la mayoría de las organizaciones. – SolutionYogi

Respuesta

18

Al observar el código para HttpSessionState, nos muestra que, de hecho, son lo mismo.

public sealed class HttpSessionState : ICollection, IEnumerable 
{ 
    private IHttpSessionState _container; 
... 
    public void Add(string name, object value) 
    { 
     this._container[name] = value; 
    } 

    public object this[string name] 
    { 
     get 
     { 
      return this._container[name]; 
     } 
     set 
     { 
      this._container[name] = value; 
     } 
    } 
... 
} 

En cuanto a los dos

Almacenamiento de datos en formato como key = "Value"Dictionary clase en C#.

En realidad almacenan el resultado en un objeto IHttpSessionState.

+1

Esta es una gran respuesta porque muestra en el código exactamente por qué las dos funciones son equivalentes, lo que ayuda a internalizar el concepto. Me gusta la nota en otro Comentario de @matthew sobre Dictionary, porque he estado pensando todo el tiempo que estábamos usando un diccionario u otra tabla hash en estado de sesión, y francamente siempre he hecho el tonto baile para ver si un valor ya existía antes de agregar o modificar en función de eso. – TonyG

+0

No es lo mismo porque: Cuando __key__ existe el __value__ es ** _ update _ ** pero si __key__ __doesn't__ existe ellos ** _ create _ ** con el __value__, si como __ ** SaveOrUpdate ** __ method. – Adhemar

9

Los dos fragmentos de código que publicó son uno y el mismo en funcionalidad. Ambos actualizan (o crean si no existe) un determinado objeto de sesión definido por la clave.

Session.Add("name",txtName.text);

es lo mismo que:

Session["name"] = txtName.text;

El primero es a base de método, en el que el segundo es una cadena a base de indizador. Ambos sobrescriben el valor anterior que tiene la tecla.

+3

En contraste con un 'Diccionario', si intenta y 'Agregar' a un diccionario dos veces con la misma clave, arrojará una excepción. El indexador de un 'Diccionario' funciona de manera similar al objeto' Sesión' (agregará o actualizará, y no arrojará una excepción). – Matthew

+0

@Matthew gran nota adicional ... –

+0

@Mathew - Gracias por la nota adicional –

Cuestiones relacionadas