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

Ban*_*hee 12 system.web.caching asp.net-mvc-2

嗨,

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

if(Cache["MyKey"] != null)
Run Code Online (Sandbox Code Playgroud)

但这不起作用?如果我从Cache类创建一个实例,我将能够以这种方式获取对象:

cache.Get("MyKey") or cache["MyKey"]
Run Code Online (Sandbox Code Playgroud)

但即使我像这样检查null:

if(cache["MyKey"] != null)
Run Code Online (Sandbox Code Playgroud)

它会抛出一个NullRefException?

我究竟做错了什么?

编辑1:

这就是我实现缓存的方式

private Cache cache
        {
            get {
                if (_cache == null)
                    _cache = new Cache();
                return _cache; }
        }
Run Code Online (Sandbox Code Playgroud)

mar*_*pet 28

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

if(Cache["MyKey"] != null)
Run Code Online (Sandbox Code Playgroud)

是正确的.

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

来自MSDN:

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