2011-02-01 80 views
9

嗨,如何检查是否在缓存(System.Web.Cache)存在项目?

要检查钥匙在缓存中已经存在我shoulde能够做到以下几点:

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

但这却不行?如果我创建一个从Cache类的实例,我将能够获取对象是这样的:

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

但是即使我检查null是这样的:

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

它会抛出一个NullRefException?

我在做什么错?

EDIT1:

这是我instansiate缓存

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

你是如何实例化Cache实例的?它状态并没有你的钥匙扔NRE,是高速缓存对象本身 – Victor 2011-02-01 20:05:41

+0

普莱斯看到EDIT1。 – Banshee 2011-02-01 20:07:20

回答

27

检查是否为空值如何测试某个键的对象是否在缓存中。因此,

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

是正确的。

但是,你不应该实例化一个新的缓存对象。您可以改用System.Web.HttpContext.Current.Cache。这是Cache的实例,并位于应用程序域中。

MSDN:此类的

一个实例被创建 每个应用程序域,它仍然 有效的,只要应用 领域保持活跃。信息 关于这个类的一个实例是通过HttpContext对象的或Page对象的缓存 属性的Cache属性 可用。

0

您应该检查缓存是否为空&后检查密钥是否存在(通过使用.Contains方法)。

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