Как проверить, существует ли элемент в кэше (System.Сеть.Кэш)?

Привет,

чтобы проверить, существует ли ключ в кэше, я должен сделать следующее:

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

это, однако, не работает? Если я создам экземпляр из класса Cache, я смогу получить объект таким образом:

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

но даже если я проверяю null, как это:

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

это вызовет исключение NullRefException?

что я делаю не так?

Edit1 :

это, как я instansiate кэш

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

2 ответов


проверка значения null-это проверка того, находится ли объект для определенного ключа в кэше. Следовательно,

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

является правильным.

однако не следует создавать экземпляр нового объекта кэша. Вы можете использовать System.Web.HttpContext.Current.Cache вместо. Это экземпляр кэша и живет в домене приложения.

С MSDN:

создается один экземпляр этого класса для каждого домена приложения, и он остается действует как долго в качестве приложения домен остается активным. Информация об экземпляре этого класса доступно через свойство Cache объекта HttpContext или кэша свойство объекта Page.


вы должны проверить, не является ли кэш Null & post, который проверяет, существует ли ключ или нет (с помощью .Содержит метод).

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