2011-02-01 21 views
9

Hola,¿Cómo comprobar si el elemento existe en Caché (System.Web.Cache)?

Para comprobar si la clave ya existe en la memoria caché I SHOULDE ser capaz de hacer lo siguiente:

if(Cache["MyKey"] != null) 

Esto sin embargo no funciona? Si creo una instancia de la clase Cache voy a ser capaz de conseguir el objeto de esta manera:

cache.Get("MyKey") or cache["MyKey"] 

Pero incluso si yo comprobar NULL como esto:

if(cache["MyKey"] != null) 

Se generará un NullRefException?

¿Qué estoy haciendo mal?

Edit1:

Así es como me instansiate la caché

private Cache cache 
     { 
      get { 
       if (_cache == null) 
        _cache = new Cache(); 
       return _cache; } 
     } 
+0

¿Cómo está instanciando la instancia de caché? No es la clave que arroja el NRE, es el objeto de caché en sí – Victor

+0

. Oportunidades, vea Edición1. – Banshee

Respuesta

27

Comprobación de un valor nulo es la forma de probar si un objeto para una determinada clave está en la caché. Por lo tanto,

if(Cache["MyKey"] != null) 

es correcto.

Sin embargo, no debe instanciar un nuevo objeto Cache. Puede usar System.Web.HttpContext.Current.Cache en su lugar. Esta es la instancia de la memoria caché y vive en el dominio de la aplicación.

De MSDN:

Una instancia de esta clase se crea por dominio de aplicación, y sigue siendo válida siempre y cuando la aplicación dominio permanece activo. La información sobre una instancia de esta clase es disponible a través de la propiedad Cache del objeto HttpContext o la propiedad Cache del objeto Page.

+0

Gracias, me perdí eso. – Banshee

0

Usted debe comprobar si la caché no es nulo & post que comprobar si existe la clave o no (usando el método .Contains).

if (myCache != null && myCache.Contains("keyName") && myCache.Get("keyName") != null) 
     { 
      myDS = (DataSet)myCache.Get("keyName"); 
     } 
Cuestiones relacionadas