Asp.net mvc 2 如何检查缓存(System.Web.Cache)中是否存在项?

Asp.net mvc 2 如何检查缓存(System.Web.Cache)中是否存在项?,asp.net-mvc-2,system.web.caching,Asp.net Mvc 2,System.web.caching,你好, 要检查缓存中是否已经存在密钥,我应该能够执行以下操作: if(Cache["MyKey"] != null) 然而,这不起作用吗?如果我从缓存类创建实例,我将能够通过以下方式获取对象: cache.Get("MyKey") or cache["MyKey"] 但即使我像这样检查null: if(cache["MyKey"] != null) 它将抛出NullRefException 我做错了什么 Edit1: 这就是我实例化缓存的方式 private Cache cache

你好,

要检查缓存中是否已经存在密钥,我应该能够执行以下操作:

if(Cache["MyKey"] != null)
然而,这不起作用吗?如果我从缓存类创建实例,我将能够通过以下方式获取对象:

cache.Get("MyKey") or cache["MyKey"]
但即使我像这样检查null:

if(cache["MyKey"] != null)
它将抛出NullRefException

我做错了什么

Edit1:

这就是我实例化缓存的方式

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

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

if(Cache["MyKey"] != null)
这是正确的

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

发件人:

将创建此类的一个实例 每个应用程序域,它仍然 只要申请有效 域仍处于活动状态。问询处 关于这个类的一个实例是 可通过缓存属性获取 HttpContext对象或缓存的 页对象的属性


您应该检查缓存是否不为Null,然后检查密钥是否存在(通过使用.Contains方法)


如何实例化缓存实例?抛出NRE的不是您的键,而是缓存对象本身,问题在于缓存对象实际为空时,尤其是在尝试再次获取数据的查询非常昂贵的情况下。
if (myCache != null && myCache.Contains("keyName") && myCache.Get("keyName") != null)
        {
            myDS = (DataSet)myCache.Get("keyName");
        }