Как проверить, существует ли элемент в Cache (System.Web.Cache)? - PullRequest
11 голосов
/ 01 февраля 2011

Привет

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

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

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

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

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

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

Будет ли выбрасываться исключение NullRefException?

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

Редактировать1:

Вот как я создаю экземпляр кеша

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

Ответы [ 2 ]

28 голосов
/ 01 февраля 2011

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

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

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

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

From MSDN :

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

0 голосов
/ 02 июня 2016

Вы должны проверить, не является ли кэш пустым, и опубликовать, чтобы проверить, существует ли ключ (с помощью метода .Contains).

if (myCache != null && myCache.Contains("keyName") && myCache.Get("keyName") != null)
        {
            myDS = (DataSet)myCache.Get("keyName");
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...