Проверка на нулевое значение HttpContext.Current.Cache

В приведенном ниже фрагменте я пытаюсь назначить значение кэша, если значение кэша еще не существует. Я получаю ошибку Object_reference_not_set_to_an_instance_of_an_object при выполнении следующего. Что мне не хватает?

if (string.IsNullOrEmpty(HttpContext.Current.Cache[Key].ToString()))
                HttpContext.Current.Cache[Key] = data;

Я посмотрел вокруг на SO, но не смог найти что-то подобное. Может быть, я просто неправильно формулирую свою проблему.

5 ответов

Решение

HttpContext.Current может быть нулевым. HttpContext.Current.Cache[Key] может быть нулевым.

Если какой-либо из них будет нулевым, это приведет к полученной вами ошибке.

Вы должны проверить на ноль на HttpContext.Current и на HttpContext.Current.Cache[Key], оба из которых могут быть нулевыми. Вот возможное решение, если вы в порядке, не устанавливая ключ кэша, если HttpContext.Current нулевой.

if (HttpContext.Current != null &&
    (HttpContext.Current.Cache[Key] == null || string.IsNullOrEmpty(HttpContext.Current.Cache[Key].ToString()))
{
     HttpContext.Current.Cache[Key] = data;
}

Вы получаете NullReferenceException, потому что вы пытаетесь вызвать ToString() на null пример.

Вы должны проверить, если HttpContext.Current.Cache[Key] является null перед звонком ToString()

if (HttpContext.Current.Cache[Key] == null)
{
   HttpContext.Current.Cache[Key] = data;
}

Я просто изменил логику "получить значение, преобразовать в строку, сравнить", чтобы просто получить значение и посмотреть, является ли оно нулевым сразу. Дурак я.

if (HttpContext.Current.Cache[Key] == null)
       HttpContext.Current.Cache[Key] = data;

"Object_reference_not_set_to_an_instance_of_an_object error" на самом деле, по сути, является нулевым значением, которое я искал...

Если они ключа нет, то это вернет null:

HttpContext.Current.Cache[Key]

Вы тогда слепо звоните ToString() на значение из кэша, вызывая исключение.

Вам необходимо присвоить значение из кэша временной переменной и проверить его на null перед звонком ToString(),

Другие вопросы по тегам