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

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

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

是正确的。

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

来自MSDN

每个应用程序域创建一个此类的实例,只要应用程序域保持活动状态,它就保持有效。有关此类实例的信息可通过 HttpContext 对象的 Cache 属性或 Page 对象的 Cache 属性获得。

于 2011-02-01T20:09:23.320 回答
0

您应该检查缓存是否为 Null 并发布检查密钥是否存在(通过使用 .Contains 方法)。

if (myCache != null && myCache.Contains("keyName") && myCache.Get("keyName") != null)
        {
            myDS = (DataSet)myCache.Get("keyName");
        }
于 2016-06-02T13:13:54.167 回答