Проверка на нулевое значение 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()
,