13

やあ、

キーがキャッシュに既に存在するかどうかを確認するには、次のことができるはずです。

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

しかし、これは機能しませんか?Cache クラスからインスタンスを作成すると、次の方法でオブジェクトを取得できます。

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

しかし、このように null をチェックしても:

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

NullRefException をスローしますか?

私は何を間違っていますか?

編集1:

これは、キャッシュをインスタンス化する方法です

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

2 に答える 2

29

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

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

正しい。

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

MSDNから:

このクラスのインスタンスはアプリケーションドメインごとに1つ作成され、アプリケーションドメインがアクティブである限り有効です。このクラスのインスタンスに関する情報は、HttpContextオブジェクトのCacheプロパティまたはPageオブジェクトのCacheプロパティから入手できます。

于 2011-02-01T20:09:23.320 に答える