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

时间:2011-02-01 20:02:04

标签: asp.net-mvc-2 system.web.caching

您好,

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

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; }
        }

2 个答案:

答案 0 :(得分:28)

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

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

是对的。

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

来自MSDN

  

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

答案 1 :(得分:0)

你应该检查缓存是否不是Null&检查密钥是否存在的帖子(使用.Contains方法)。

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