Система C#.Ошибка NullReferenceException Google Calendar [дубликат]
На этот вопрос уже есть ответ здесь:
У меня есть программа, в которой я продолжаю получать ошибку NullReferenceException. Вот код, который вызывает ошибку:
string description = "";
if (string.IsNullOrEmpty(eventItem.Description.ToString()))
{
description = "No description available.";
}
else
{
description = eventItem.Description.ToString();
}
Я просмотрел этот пост (Что такое NullReferenceException и как это исправить это?), и я попробовал несколько решений (боюсь, что я просто не понимаю все из них достаточно, чтобы попробовать их), но я просто не могу понять, почему это происходит. В моем понимании, эта ошибка возникает потому, что строка на самом деле null.
В моем Календаре Google есть события, которые не имеют введенного описания, поэтому описание равно нулю, но разве код, который у меня есть, не должен проверять это и обрабатывать его? Или, есть проблема, что eventItem.Описание.ToString() не может быть null когда я вызываю метод IsNullOrEmpty? Я также попытался изменить оператор if следующим образом:
if (eventItem.Description.ToString() == null)
...но я все равно получаю ошибку NRE. Я пытался переписать свой код так много разных способов, но ничего не получалось. Я на пределе своих возможностей!
2 ответа:
Ваш
eventItemсам может быть нулевым. Сделайте что-нибудь по линиямif ( eventItem!= null && eventItem.Description != null && eventItem.Description.ToString() == null)Обновлено после того, как Дстэнли указал в комментарии, что .Сравнение ToString () = = null было бы излишним.
Просто чтобы помочь вам понять немного лучше... NullReferenceException в основном означает, что вы пытаетесь использовать какой-то объект без его создания. Один из самых простых способов предотвратить это-добавить проверку null, если вы не уверены, не является ли объект null. И когда я говорю добавить нуль проверьте, это просто означает сравнение с null в блоке if перед обращением к любому свойству объекта.if ( eventItem!= null && eventItem.Description != null) { }if( objectName != null) { //then do something on the object }
Разве код, который у меня есть, не должен проверить это и справиться с этим?
Нет, если
Обратите внимание, что еслиitemилиitem.Descriptionравно null. Еслиitemравно null, то вызов.Descriptionвызовет исключение нулевой ссылки, а еслиitem.Descriptionравно null, то вызовToStringвызовет исключение нулевой ссылки. Нет никакой "магии", которая позволяет вызыватьToStringпо нулевой ссылке.item.Descriptionуже является строкой, то нет необходимости вызыватьToString(). просто сделайте:if (string.IsNullOrEmpty(eventItem.Description)) { description = "No description available."; } else { description = eventItem.Description; }