2011-02-01 325 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"); 
     } 
相關問題