2011-02-01 36 views
9

こんにちは、アイテムがCache(System.Web.Cache)に存在するかどうかを確認する方法?

キーが既に私は次の操作を行うことができるようshouldeキャッシュ内に存在するかどうかを確認するには、次の

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

しかし、これは動作しませんか?

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

しかし、私はこのようにnullをチェックした場合でも:私はCacheクラスからインスタンスを作成する場合、私は、オブジェクトをこのように取得することができます

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

それはNullRefExceptionがスローされますか?

私は間違っていますか?

EDIT1:

これは私がキャッシュNULL値のチェック

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

どのようにCacheインスタンスをインスタンス化していますか?あなたのキーがNREをスローするのではなく、キャッシュオブジェクトそのものです – Victor

+0

Edit1を参照してください。 – Banshee

答えて

27

は、特定のキーのオブジェクトがキャッシュ内にあるかどうかをテストする方法であるinstansiate方法です。したがって、

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

が正しいです。

ただし、新しいCacheオブジェクトをインスタンス化しないでください。代わりにSystem.Web.HttpContext.Current.Cacheを使用することができます。これはキャッシュのインスタンスであり、アプリケーションドメイン内に存在します。 MSDNから

:このクラスの

1つのインスタンスがアプリケーションドメインあたり 作成され、それがアプリケーション ドメインがアクティブのままに限り有効 まま。このクラスのインスタンスについての の情報は、HttpContextオブジェクトのCacheプロパティ またはPageオブジェクトのCache プロパティを通じて利用可能な です。

+0

ありがとう、私はそれを逃した。 – Banshee

0

キャッシュキーが(.Containsメソッドを使用して)存在するかどうかをチェックヌル&ポストでない場合は、チェックする必要があります。

if (myCache != null && myCache.Contains("keyName") && myCache.Get("keyName") != null) 
     { 
      myDS = (DataSet)myCache.Get("keyName"); 
     } 
関連する問題